Chcę uzyskać konkretne wyjście iterujące Ruby Hash.
Oto skrót, który chcę powtórzyć:
hash = {
1 => ['a', 'b'],
2 => ['c'],
3 => ['d', 'e', 'f', 'g'],
4 => ['h']
}
Oto wynik, który chciałbym uzyskać:
1-----
a
b
2-----
c
3-----
d
e
f
g
4-----
h
W Ruby, jak mogę uzyskać takie wyjście za pomocą mojego skrótu?
Odpowiedzi:
Jeśli chodzi o kolejność, powinienem dodać, że w 1.8 elementy będą iterowane w kolejności losowej (cóż, właściwie w kolejności określonej funkcją haszującą Fixnum), natomiast w wersji 1.9 będą iterowane w kolejności dosłownej.
źródło
?
klucz zamiast? np .:|?, array|
czy to jest poprawna składnia??
nie jest poprawną nazwą zmiennej w Ruby. Możesz użyć_
, ale nie musisz .|_, v|
Najbardziej podstawowym sposobem iteracji po skrócie jest:
źródło
źródło
Wywołanie sortowania w haszu przekształca go w zagnieżdżone tablice, a następnie sortuje je według klucza, więc wszystko czego potrzebujesz to:
A jeśli tak naprawdę nie potrzebujesz części „----”, może to być po prostu:
źródło
Moje jedno liniowe rozwiązanie:
hash.each { |key, array| puts "#{key}-----", array }
Myślę, że jest dość łatwy do odczytania.
źródło
Możesz także sprecyzować,
Hash::each
aby obsługiwał wyliczanie rekurencyjne . Oto moja wersjaHash::each
(Hash::each_pair
) z obsługą bloku i modułu wyliczającego :Oto użytkowania przykłady z
Hash::each
zi bezrecursive
flagi:Oto przykład z samego pytania:
Zobacz także moją rekurencyjną wersję
Hash::merge
(Hash::merge!
) tutaj .źródło