【问题标题】:how to sort an array of arrays by three or more elements (ruby)如何按三个或更多元素对数组进行排序(ruby)
【发布时间】:2011-01-14 03:39:31
【问题描述】:

我有 14 列的 csv 文件,我想在 ruby​​ 中按第 6 列然后按第 2 列然后按第 11 列对其进行排序。

有一个不错的方法 .sort_by 但它只适用于两列,不是吗。而array_of_arrays.sort_by {|e| [e[2], e[0],e[1]],} 不起作用。

假设在下面的示例中,我希望它按第 3、1、2 列排序

array_of_arrays = [[1,9,'a'],[2,2,'a'], [2,6,'b'], [1,3,'a'], [2,1,'b']]

array_of_arrays.each {|line| puts line.inspect }
puts
array_of_arrays.sort_by {|e| [e[2], e[0]]} .each {|line| puts line.inspect }

但结果并不理想

[1, 9, "a"]
[2, 2, "a"]
[2, 6, "b"]
[1, 3, "a"]
[2, 1, "b"]

[1, 9, "a"]
[1, 3, "a"]
[2, 2, "a"]
[2, 6, "b"]
[2, 1, "b"]

【问题讨论】:

  • 在您的示例中} 之前有一个逗号array_of_arrays.sort_by {|e| [e[2], e[0],e[1]],}
  • @J.F.塞巴斯蒂安:没错,这就是为什么不适合我的原因。 :-) 至少其他人可以找到答案,并了解到一个额外的逗号会有很大的不同

标签: ruby arrays sorting


【解决方案1】:

这个:

array_of_arrays = [[1,9,'a'],[2,2,'a'], [2,6,'b'], [1,3,'a'], [2,1,'b']]

array_of_arrays.each {|line| p line }
puts
array_of_arrays.sort_by {|e| [e[2], e[0], e[1]]} .each {|line| p line }

为我生成以下输出:

[1, 3, "a"]
[1, 9, "a"]
[2, 2, "a"]
[2, 1, "b"]
[2, 6, "b"]

这就是你想要的,对吧?

【讨论】:

  • 为了让 DRY 达到疯狂的极限,我会考虑: sort_by { |a| [2, 0, 1].collect { |i|一个[i] } }
  • @Wayne Conrad:我刚刚使用了你的干解决方案。太好了。我有我想要在数组中排序的元素,所以我可以随时更改顺序并添加任何人而无需更改代码根本!!!!
  • @Radek,当我添加该评论时,我什至没有考虑用户确定的排序顺序。干得好!
  • n 个元素的数组怎么样?不写 e[0],e[1]..e[n]。我认为不值得提出新问题
猜你喜欢
  • 2016-04-11
  • 1970-01-01
  • 2011-02-07
  • 2016-10-11
  • 2016-05-29
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多