Chcę użyć for-each i counter:
i=0
for blah in blahs
puts i.to_s + " " + blah
i+=1
end
Czy jest lepszy sposób, aby to zrobić?
Uwaga: nie wiem, czy blahs
to tablica, czy hash, ale konieczność zrobienia blahs[i]
tego nie uczyniłaby tego bardziej seksownym. Chciałbym również wiedzieć, jak pisać i++
w języku Ruby.
Technicznie rzecz biorąc, odpowiedź Matta i Squeegy'ego była pierwsza, ale ja daję najlepszą odpowiedź na paradoję, więc rozprowadź trochę punkty na SO. Jego odpowiedź zawierała również notatkę o wersjach, która jest nadal aktualna (o ile mój Ubuntu 8.04 używa Ruby 1.8.6).
Powinienem był użyć, puts "#{i} #{blah}"
który jest o wiele bardziej zwięzły.
Odpowiedzi:
Jak powiedzieli ludzie, możesz użyć
ale jeśli potrzebujesz indeksów z iteratorem innym niż "each" (na przykład, jeśli chcesz mapować z indeksem lub czymś podobnym), możesz połączyć wyliczające z metodą each_with_index lub po prostu użyć with_index:
To jest coś, co możesz zrobić w Ruby 1.8.7 i 1.9.
źródło
Nie możesz tego zrobić za. I tak zwykle lubię bardziej deklaratywne wezwanie do każdego osobiście. Częściowo dlatego, że łatwo jest przejść do innych form, gdy osiągniesz granicę składni for.
źródło
Tak, to
collection.each
zrobić pętle, a następnieeach_with_index
uzyskać indeks.Prawdopodobnie powinieneś przeczytać książkę o Rubim, ponieważ jest to fundamentalna wersja Rubiego i jeśli jej nie znasz, będziesz miał duże kłopoty (spróbuj: http://poignantguide.net/ruby/ ).
Zaczerpnięte z kodu źródłowego Rubiego:
źródło
Jeśli nie masz nowej wersji
each_with_index
, możesz użyćzip
metody do parowania indeksów z elementami:który produkuje:
źródło
'%s %s' % [1, "two"]
w dokumentach Rubiego? Dziękujemy za pomoc i zaoszczędzenie miejsca w pionie przez użycie jednej linii do spakowania i mapowania.Co do twojego pytania o robienie
i++
, cóż, nie możesz tego zrobić w Rubim.i += 1
Oświadczenie trzeba było to dokładnie w jaki sposób powinniśmy to zrobić.źródło
Wyliczanie przeliczalny seria jest bardzo ładne.
źródło
Jeśli
blahs
jest to klasa, która miesza się w Enumerable, powinieneś móc to zrobić:źródło
Jeśli chcesz uzyskać indeks rubinów dla każdego z nich, możesz użyć
Oto przykład pokazujący, jak to
.each_with_index
działa:Spowoduje to wydrukowanie:
źródło