【发布时间】:2011-10-25 09:52:55
【问题描述】:
好的,假设我有一个像这样的数组 [[z,1], [d,3], [e,2]],我如何按每个组成数组的第二个元素对这个数组进行排序?这样我的数组将如下所示? [[z,1], [e,2], [d,3]]?
【问题讨论】:
-
请注意,这实际上是一个数组数组,而不是二维数组。
好的,假设我有一个像这样的数组 [[z,1], [d,3], [e,2]],我如何按每个组成数组的第二个元素对这个数组进行排序?这样我的数组将如下所示? [[z,1], [e,2], [d,3]]?
【问题讨论】:
作为用户 maerics 的回答,它提供升序排序。谢谢这个答案对我非常有用。 对于降序排序,我使用 -
arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}.reverse
#=> [[:d, 3], [:e, 2], [:z, 1]]
【讨论】:
arr.sort{|a,b|| b[1] <=> a[1]} 来保存“反向”调用(注意比较运算符的操作数的相反顺序)。
arr.sort{|a,b| b[1] <=> a[1]}。您插入的竖线字符过多
arr = [[:z,1], [:d,3], [:e,2]]
arr.sort {|a,b| a[1] <=> b[1]}
# => [[:z, 1], [:e, 2], [:d, 3]]
或者正如用户@Phrogz 指出的那样,如果内部数组每个都有两个元素:
arr.sort_by{|x,y|y} # => [[:z, 1], [:e, 2], [:d, 3]]
arr.sort_by(&:last) # => [[:z, 1], [:e, 2], [:d, 3]]
【讨论】:
arr.sort_by{|s,n| n } 甚至 arr.sort_by(&:last)(在 Ruby 1.9 中)。
sort 因为在 ruby 2.4 中(实际上是 2.0 甚至更早)sort_by 不存在,但只有 sort_by! 和 doc 表示:结果不能保证稳定。当两个键相等时,对应元素的顺序是不可预测的。 因此,要使用sort_by!,您必须具有 uniq 键。所以@maerics 请编辑你的帖子来说明或删除sort_by。
Enumerable#sort_by,因为至少 v1.8.7 并且问题中没有要求稳定性。