我有一个数组
arr = [[1,2],[2,3],[2,1],[0,1]]
我希望他们井井有条:
arr = [[0,1],[1,2],[2,1],[2,3]]
我想使用Ruby的sort_by
方法。我如何像这样在Ruby中在两个级别上对数组的数组进行排序?
答案 0 :(得分:6)
Array#sort
默认按字典顺序对子数组进行排序(请参见Array#<=>
)。您无需定义任何内容:
[[1,2],[2,3],[2,1],[0,1]].sort
# => [[0, 1], [1, 2], [2, 1], [2, 3]]
如果您确实要使用sort_by
:
[[1,2],[2,3],[2,1],[0,1]].sort_by(&:itself)
# => [[0, 1], [1, 2], [2, 1], [2, 3]]
答案 1 :(得分:1)
如果您认为子数组的每个元素都是从0到9的数字,则可以使用Array#sort_by
,其中该块将数组转换为字符串然后转换为整数:
arr.sort_by { |e| e.join.to_i }
#=> [[0, 1], [1, 2], [2, 1], [2, 3]]
[1, 2].join #=> "12"
[1, 2].join.to_i #=> 12
arr = [[1,0,2,0],[2,3],[2,1],[0,1]]
#=> [[0, 1], [2, 1], [2, 3], [1, 0, 2, 0]]