如何在Ruby中按字典顺序对数组元素进行排序

时间:2019-02-16 16:32:42

标签: ruby sorting

我有一个数组

arr = [[1,2],[2,3],[2,1],[0,1]]

我希望他们井井有条:

arr = [[0,1],[1,2],[2,1],[2,3]]

我想使用Ruby的sort_by方法。我如何像这样在Ruby中在两个级别上对数组的数组进行排序?

2 个答案:

答案 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]]