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.