对2d数组进行排序以获得不同的结果,而不会在ruby中重复

时间:2012-07-24 08:02:28

标签: ruby arrays distinct sorting

我有一个二维数组:

arr = [
  ["John", 17],
  ["John", 17],
  ["Abe", 14],
  ["Kobian", 18],
  ["Hony", 16],
  ["Mony", 19],
  ["John", 18],
  ["Hari", 15],
]

我希望看到独特的结果并按字母顺序排序,以便不重复相同的名称。 如果姓名不同且年龄相同,则选择一个不重复且年龄较小的人。

我工作了很多,但没有找到解决方法......提前感谢答案......

1 个答案:

答案 0 :(得分:4)

arr.group_by {|e| e[0] }.map {|k,v| v.min}.sort

=> [["Abe", 14], ["Hari", 15], ["Hony", 16], ["John", 17], ["Kobian", 18], ["Mony", 19]]

并保持不同的年龄:

require 'set'
Set.new(arr).sort

=> [["Abe", 14], ["Hari", 15], ["Hony", 16], ["John", 17], ["John", 18], ["Kobian", 18], ["Mony", 19]]