5.10. Inwersja elementów hasza
Problem
Dla danego hasza chcemy stworzyć jego „lustrzany” odpowiednik — czyli taki, w którym klucze i wartości zamienione będą rolami. Jeżeli na przykład w oryginalnym haszu istnieje pozycja "gajowy" => "wilk"
, to jej odpowiednikiem w haszu docelowym ma być pozycja "wilk" => "gajowy"
.
Rozwiązanie
Operację tę najprościej jest wykonać za pomocą metody Hash#invert
:
phone_directory = { 'Alice' => '555-1212', 'Bob' => '555-1313', 'Mallory' => '111-1111' } phone_directory.invert # => {"111-1111"=>"Mallory", "555-1212"=>"Alice", "555-1313"=>"Bob"}
Dyskusja
Metoda Hash#invert
nie spełni jednak zadowalająco opisanego zadania, jeśli odwzorowanie kluczy w wartości nie będzie odwzorowaniem różnowartościowym, ...
Get Ruby. Receptury now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.