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

czj · 2019年03月09日 · 最后由 luikore 回复于 2019年03月14日 · 2131 次阅读

如果要排序的元素是数组,先按数组的第一个元素升序排列,如果第一个元素值相同按第二个元素降序排,怎么写? 比如: [[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) }

Awlter1 回复

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

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]}

需要 登录 后方可回复, 如果你还没有账号请 注册新账号