新手问题 多字段排序怎么写

czj · March 09, 2019 · Last by luikore replied at March 14, 2019 · 2133 hits

如果要排序的元素是数组,先按数组的第一个元素升序排列,如果第一个元素值相同按第二个元素降序排,怎么写? 比如: [[2, 1], [1, 1], [2, 2], [1, 2]] 要排序成: [[1, 2], [1, 1], [2, 2], [2, 1]]

直接翻译就是这样了吧

arrs.sort { |arr1, arr2| arr1.first == arr2.first ? (arr2.last <=> arr1.last) : (arr1.first <=> arr2.first) }

这样搞不知道行不行

arrs.sort { |arr1, arr2| (arr1.first <=> arr2.first) + (arr2.last <=> arr1.last) }

Reply to Awlter1

谢谢!你是怎么知道这个用法的。

Reply to Awlter1

arrs.sort { |arr1, arr2| (arr1.first <=> arr2.first) + (arr2.last <=> arr1.last) } 这种方式不行

arrs.sort { |arr1, arr2| arr2.last <=> arr1.last}.sort {|arr1, arr2| arr1.first <=> arr2.first}

按字面意思写就好了

array.sort_by(&:second).reverse.sort_by(&:first)
a.sort_by{|e| [e.first, -e.last]}

可以简单点: a.sort_by{|(x, y)| [x, -y]}

You need to Sign in before reply, if you don't have an account, please Sign up first.