2017-02-17 3 views
0

Я пытаюсь преобразовать массив хэшей в хэш с ключом как один из элементов хеша в массиве.Преобразование массива хэша в один хэш в ruby ​​

Например: a = [{"active_accounts": 3, "id": 5}, {"active_accounts": 6, "id": 1}

Я хочу, чтобы преобразовать этот массив в

a = {5: {"active_accounts": 3}, 1: {"active_accounts": 6}} 

Я пытался сделать это с помощью цикла по массиву и доступ к индивидуальному хэшу для конкретного ключа, но это не кажется работать. Любые выводы будут оценены.

+0

Можете ли вы опубликовать код, который вы пробовали. –

+0

'response = Hash.new a.each do | key | ответ [ключ [: id]] = {"active_accounts": key [: active_accounts]} конец ответ ' –

ответ

2
a.each_with_object({}) {|obj , hash| hash.merge!(Hash[obj[:id], Hash["active_accounts",obj[:active_accounts]]])} 

# {5=>{"active_accounts"=>3}, 1=>{"active_accounts"=>6}} 

Надеется, что это помогает.

+0

Конечно, Рангнат. :) –

1

Безопасный вариант, отображение в массивы (такой же, как ожидается, "id" и обработал должным образом):

a.group_by { |e| e.delete("id") } 

Именно то, что вы спросили:

a.group_by { |e| e.delete("id") } 
.map { |k, v| [k, v.first] } 
.to_h 
+0

Большое спасибо mudasobwa. Большая помощь. –

1

Еще одно из возможных решений)

a.map { |hash| [hash.delete(:id), hash] }.to_h 
#=> {5=>{:active_accounts=>3}, 1=>{:active_accounts=>6}} 
Смежные вопросы