用Ruby按子元素对数组的数组进行排序

3

我有一个“二维数组”,每次包含两个值。

array = [[:tuesday, 0.25], [:monday, 1], [:thursday, 0.75]]

我希望使用“child”数组中的数字按降序对“parent”数组进行排序。结果应如下所示:

array = [[:monday, 1], [:thursday, 0.75], [:tuesday, 0.25]]

我不太确定从哪里开始。

这段内容与IT技术无关。
4个回答

8
您可以像这样向sort方法传递一个块:
array.sort { |a, b| b[1] <=> a[1] }

4
我会倾向于写
array.sort_by(&:last).reverse

3
array = [['Tuesday',0.25],['Monday',1],['Thursday',0.75]]
p array.sort_by{|a| -a[1]}
# => [["Monday", 1], ["Thursday", 0.75], ["Tuesday", 0.25]]

1
你可以使用 sort 方法返回一个新的已排序数组(保存为 new_array)。
new_array = array.sort{|x, y| y[1] <=> x[1]}
# => [["Monday", 1], ["Thursday", 0.75], ["Tuesday", 0.25]]

这将保持原始的array不变。
array
# => [["Tuesday", 0.25], ["Monday", 1], ["Thursday", 0.75]]

或者你可以使用 sort! 来改变原始数组的顺序。

array.sort!{|x, y| y[1] <=> x[1]}
# => [["Monday", 1], ["Thursday", 0.75], ["Tuesday", 0.25]]

array
# => [["Monday", 1], ["Thursday", 0.75], ["Tuesday", 0.25]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接