添加哈希数组并按哈希值排序

时间:2016-11-17 10:20:07

标签: arrays ruby

我有两个数组

arrayOne = [{:name=>"name1", :id=>1}, {:name=>"name2", :id=>2}, {:name=>"name3", :id=>3}]

arrayTwo = [{:name=>"name2.1", :id=>1}, {:name=>"name2.2", :id=>2}, {:name=>"name2.3", :id=>3}]

我想要将这两个数组压平并排序成一个大数组,所以我尝试了这个

@bigArray = [arrayOne, arrayTwo].flatten.sort {|a,b| a.name <=> b.name}

然而,这不起作用。我是rails的新手,我不确定上面的flatten.sort是否应该映射? 有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

(arrayOne + arrayTwo).sort_by { |e| e[:name] }
#=> [{:name=>"name2.1", :id=>1},
#    {:name=>"name2.1", :id=>1},
#    {:name=>"name2.2", :id=>2},
#    {:name=>"name2.2", :id=>2},
#    {:name=>"name2.3", :id=>3},
#    {:name=>"name2.3", :id=>3}]

答案 1 :(得分:1)

首先,访问哈希成员的ruby语法是hash[key]而不是hash.key

其次,由于arrayOnearrayTwo都是数组,因此您可以在它们上使用+运算符,然后进行排序。没有必要制作一个中间阵列,然后做一个展平。

将其写为:

bigArray = (arrayOne + arrayTwo).sort_by { |el| el[:name] }