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 O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.