Ich möchte einen für jeden und einen Zähler verwenden:
i=0
for blah in blahs
puts i.to_s + " " + blah
i+=1
end
Gibt es einen besseren Weg, dies zu tun?
Hinweis: Ich weiß nicht, ob blahs
es sich um ein Array oder einen Hash handelt, aber wenn ich es tun muss, wird blahs[i]
es nicht viel sexy. Außerdem würde ich gerne wissen, wie man i++
in Ruby schreibt .
Technisch gesehen kam die Antwort von Matt und Squeegy zuerst, aber ich gebe Paradoja die beste Antwort, also verteile mich ein bisschen auf SO. Auch seine Antwort hatte den Hinweis zu Versionen, der immer noch relevant ist (solange mein Ubuntu 8.04 Ruby 1.8.6 verwendet).
Hätte verwenden sollen, puts "#{i} #{blah}"
was viel prägnanter ist.
Antworten:
Wie die Leute gesagt haben, können Sie verwenden
Wenn Sie jedoch Indizes mit einem anderen Iterator als "jeder" möchten (z. B. wenn Sie einen Index oder ähnliches zuordnen möchten), können Sie Enumeratoren mit der Methode each_with_index verketten oder einfach with_index verwenden:
Dies können Sie mit Ruby 1.8.7 und 1.9 tun.
quelle
Sie können dies nicht mit für tun. Normalerweise mag ich den deklarativeren Anruf an jeden persönlich sowieso. Zum Teil, weil es einfach ist, zu anderen Formen zu wechseln, wenn Sie die Grenze der for-Syntax erreichen.
quelle
Ja, es geht
collection.each
darum, Schleifen zu machen und danneach_with_index
den Index zu erhalten.Sie sollten wahrscheinlich ein Ruby-Buch lesen, da dies ein grundlegender Ruby ist und wenn Sie es nicht wissen, werden Sie in große Schwierigkeiten geraten (versuchen Sie: http://poignantguide.net/ruby/ ).
Entnommen aus dem Ruby-Quellcode:
quelle
Wenn Sie nicht über die neue Version von verfügen
each_with_index
, können Sie diezip
Methode verwenden, um Indizes mit Elementen zu koppeln:welches produziert:
quelle
'%s %s' % [1, "two"]
in den Ruby-Dokumenten? Vielen Dank für Ihre Hilfe und für die Schonung des vertikalen Platzes, indem Sie eine Linie zum Zippen und Mappen verwenden.Was Ihre Frage betrifft
i++
, können Sie dies in Ruby nicht tun. Diei += 1
Aussage, die Sie hatten, ist genau so, wie Sie es tun sollen.quelle
Die Aufzählung der Aufzählungsserien ist ziemlich nett.
quelle
Wenn
blahs
es sich um eine Klasse handelt, die Enumerable mischt, sollten Sie in der Lage sein, Folgendes zu tun:quelle
Wenn Sie für jeden einen Rubinindex erhalten möchten, können Sie diesen verwenden
Hier ist ein Beispiel, um zu zeigen, wie es
.each_with_index
funktioniert:Dies wird gedruckt:
quelle