我有两个数组
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
是否应该映射?
有更好的方法吗?
答案 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
。
其次,由于arrayOne
和arrayTwo
都是数组,因此您可以在它们上使用+
运算符,然后进行排序。没有必要制作一个中间阵列,然后做一个展平。
将其写为:
bigArray = (arrayOne + arrayTwo).sort_by { |el| el[:name] }