【问题标题】:Sorting a two-dimensional array by second value按第二个值对二维数组进行排序
【发布时间】:2011-10-25 09:52:55
【问题描述】:

好的,假设我有一个像这样的数组 [[z,1], [d,3], [e,2]],我如何按每个组成数组的第二个元素对这个数组进行排序?这样我的数组将如下所示? [[z,1], [e,2], [d,3]]?

【问题讨论】:

标签: ruby arrays


【解决方案1】:

作为用户 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] &lt;=&gt; a[1]} 来保存“反向”调用(注意比较运算符的操作数的相反顺序)。
  • 您的代码中有错字,正确的代码是arr.sort{|a,b| b[1] &lt;=&gt; a[1]}。您插入的竖线字符过多
【解决方案2】:
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(&amp;:last)(在 Ruby 1.9 中)。
  • @Phrogz Prefer sort 因为在 ruby​​ 2.4 中(实际上是 2.0 甚至更早)sort_by 不存在,但只有 sort_by!doc 表示:结果不能保证稳定。当两个键相等时,对应元素的顺序是不可预测的。 因此,要使用sort_by!,您必须具有 uniq 键。所以@maerics 请编辑你的帖子来说明或删除sort_by
  • @noraj 请注意,数组是 Enumerable#sort_by,因为至少 v1.8.7 并且问题中没有要求稳定性。
  • 如何按第二列排序,然后任何平局将按第一列排序?
猜你喜欢
  • 2013-08-17
  • 2021-11-01
  • 2021-05-03
  • 2019-01-08
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
相关资源
最近更新 更多