/ / Konwertuj tablicę skrótu na pojedynczy skrót w ruby ​​- tablice, ruby, skrót

Konwertuj tablicę mieszania na pojedynczą wartość mieszania w ruby ​​- tablice, ruby, hash

Próbuję przekonwertować tablicę skrótów na skrót z kluczem jako jeden z elementów skrótu w tablicy.

Na przykład: a = [{"active_accounts": 3, "id": 5}, {"active_accounts": 6, "id": 1}

Chcę przekonwertować tę tablicę na

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

Próbowałem to zrobić, zapętlając tablicę i uzyskując dostęp do indywidualnego skrótu dla określonego klucza, ale to nie wydaje się działać. Wszelkie potencjalne szanse byłyby mile widziane.

Odpowiedzi:

2 dla odpowiedzi № 1
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}}

Mam nadzieję, że to pomoże.


1 dla odpowiedzi nr 2

Bezpieczny wariant, mapowanie na tablice (to samo "id" są oczekiwane i odpowiednio traktowane):

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

Dokładnie o co prosiłeś:

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

1 dla odpowiedzi nr 3

Jeszcze jedno możliwe rozwiązanie)

a.map { |hash| [hash.delete(:id), hash] }.to_h
#=> {5=>{:active_accounts=>3}, 1=>{:active_accounts=>6}}