2016-11-17 3 views
1

У меня есть два массиваДобавление массивов и хешей сортировать по хэш-значение

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} 

Однако это не работает. Я новичок в рельсах и неуверен в том, что выше flatten.sort должен ли он отображаться? Есть ли лучший способ сделать это?

+1

Определение "не работает" –

+0

Почему вы переназначение 'arrayOne'? –

+1

Также используйте 'a [: name] <=> b [: name]' –

ответ

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}] 
+0

Boom! Работы будут приняты за 9 минут –

1

Во-первых, синтаксис рубин для доступа к элементам хэш является hash[key], а не hash.key.

Во-вторых, поскольку оба из arrayOne и arrayTwo являются массивами, вы можете просто использовать оператор + на них, а затем сделать вид. Нет необходимости создавать промежуточный массив, а затем делать сглаживание.

написать:

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

Я вижу, что изменение bigArray для отражения [: name] <=> b [: name] работает, но мне нравится (arrayOne + arrayTwo) .sort_by {| e | e [: name]} лучше с точки зрения понимания, исходя из php, это имеет смысл для меня –

Смежные вопросы