Często znajduję siebie w tabelach wyszukiwania budynków w języku Ruby, zwykle w celu buforowania kosztownych obliczeń lub tworzenia czegoś, co przechodzę do widoku. Sądzę, że musi istnieć krótki, czytelny idiom, ale nie mogliśmy o tym myśleć. Na przykład, załóżmy, że chcę zacząćTablica ruby do indeksowanego skrótu?
[65, 66, 67, ...]
i skończyć z
{65 => "A", 66 => "B", 67 => "C", ...}
nie-całkiem-całkiem-wystarczająco dużo idiomów moglibyśmy myśleć obejmują:
array = (65..90).to_a
array.inject({}) {|hash, key| hash[key]=key.chr; hash}
{}.tap {|hash| array.each {|key| hash[key] = key.chr}}
Hash[array.zip(array.map{|key| key.chr})]
Ale wszystkie te są trochę bolesne: trudne do odczytania, łatwe do zepsucia, niewyraźne w zamierzeniu. Z pewnością Ruby (lub jakiś pomocnik Railsów) ma w tym coś fajnego?
Wow. Nigdy bym nie przypuszczał, że kilka par macierzy zostanie zinterpretowanych w ten sposób. Spodziewałam się, że zamieni się w {[65, "A"] => [66, "B"], [67, "C"] => [68, "D"], ...}. Trochę mnie to przeraża, ale nadal będę z niego korzystał. Dzięki! –
@William: Możesz użyć ['Hash. []'] (Http://apidock.com/ruby/Hash/%5B%5D/class) w dwóch postaciach: 'Hash [klucz, wartość, klucz, wartość, ...] 'lub' Hash [[[klucz, wartość], [klucz, wartość], ...]] 'z wewnętrzną tablicą reprezentującą dowolne przeliczalne plonujące pary klucz/wartość. Pamiętaj, że w Ruby jest więcej niż jeden: P Ponadto dodałem kolejną sugestię używając aspektów. –
Rzeczywiście. Właśnie tam w dokumentach. Dzięki! Na pewno sprawdzę również Facety; wygląda świetnie. –