Foreach loop

Foreach Loop (oder Für jede Schleife) ist ein Steuerfluss Aussage zum Durchqueren von Elementen in a Sammlung. Nach einem Standard wird normalerweise anstelle eines Standards verwendet Für Schleife Aussage. Im Gegensatz zu anderen für Schleifenkonstrukte jedoch foreach Loops[1] Normalerweise keinen expliziten Zähler beibehalten: Sie sagen im Wesentlichen "Tun Sie dies mit allem in diesem Satz", anstatt "tun Sie dies x mal ". Dies vermeidet Potenzial Auslösende Fehler und erleichtert Code einfacher zu lesen. In objektorientierten Sprachen a IteratorAuch wenn sie implizit ist, wird häufig als Durchquerenwert verwendet.
Das für jeden Die Erklärung in einigen Sprachen hat eine definierte Reihenfolge und verarbeitet jedes Element in der Sammlung von Ersten bis zum letzten. Das für jeden Aussage in vielen anderen Sprachen, insbesondere in Array -Programmierung Sprachen haben keine bestimmte Reihenfolge. Dies vereinfacht Schleifenoptimierung Im Allgemeinen und im Besonderen erlaubt Vektorverarbeitung von Elementen in der Sammlung gleichzeitig.
Syntax
Die Syntax variiert zwischen den Sprachen. Die meisten verwenden das einfache Wort zum
ungefähr wie folgt:
Für jeden Artikel in Sammlung: Tun Sie etwas mit dem Artikel
Sprachunterstützung
Programmiersprachen Welche Unterstützung für Schleifen umfasst ABC, Aktionen, Ada, C ++ 11, C#, Coldfusion Markup Sprache (CFML), Kobra, D, Daplex (Abfragesprache), Delphi, ECMaskript, Erlang, Java (seit 1,5),, JavaScript, Lua, Ziel c (seit 2.0), Parasail, Perl, Php, Prolog,[2] Python, Realbasic, Rebol,[3] Rot,[4] Rubin, Scala, Smalltalk, Schnell, Tcl, TCSH, Unix -Muscheln, Visual Basic .net, und Windows PowerShell. Bemerkenswerte Sprachen ohne umher sind C, und C ++ Pre-C ++ 11.
ActionScript 3.0
Aktionen Unterstützt den ECMAScript 4.0 Standard[5] zum für jedes .. in
[6] was den Wert bei jedem Index zieht.
var Foo:Objekt = { "Apfel":1, "Orange":2 }; zum jeder (var Wert:int in Foo) { verfolgen(Wert); } // Gibt "1" zurück "2"
Es unterstützt auch für in
[7] das zieht den Schlüssel bei jedem Index.
zum (var Schlüssel:Saite in Foo) { verfolgen(Schlüssel); } // Gibt "Apple" zurück "orange" zurück
Ada
Ada Unterstützt für Schleifen als Teil des Normalen Für Schleife. Sag x ist ein Array:
zum I in X'Bereich Schleife X (I) : = Get_next_element; Ende Schleife;
Diese Syntax wird hauptsächlich für Arrays verwendet, funktioniert aber auch mit anderen Typen, wenn eine vollständige Iteration erforderlich ist.
Die ADA 2012 hat Schleifen zu Foreach -Schleifen auf jeder Art von Container (Array, Listen, Karten ...) verallgemeinert:
zum Obj von X Schleife - Arbeiten Sie an OBJ Ende Schleife;
C
Das C Die Sprache hat keine Sammlungen oder ein Foreach -Konstrukt. Es verfügt jedoch über mehrere Standarddatenstrukturen, die als Sammlungen verwendet werden können, und kann leicht mit a gemacht werden Makro.
Es treten jedoch zwei offensichtliche Probleme auf:
- Das Makro ist unhygienisch: Es deklariert eine neue Variable im vorhandenen Bereich, das nach der Schleife verbleibt.
- Ein für das Leach -Makro kann nicht definiert werden, der mit unterschiedlichen Sammlungstypen (z. B. Array und verknüpfte Liste) funktioniert oder die für Benutzertypen erweiterbar ist.
C String als Sammlung von Char
#enthalten / * foreach makro, in der eine Zeichenfolge als Sammlung von Zeichenwerten */angezeigt wird #define foreach (ptrvar, strvar) \ char* ptrvar; \ für (ptrvar = strvar; ( *ptrvar)! = '\ 0'; *ptrvar ++) int hauptsächlich(int argc, verkohlen** argv) { verkohlen* S1 = "Abcdefg"; verkohlen* S2 = "123456789"; für jeden (P1, S1) { printf("Schleife 1: %c\n", *P1); } für jeden (p2, S2) { printf("Schleife 2: %c\n", *p2); } Rückkehr 0; }
C int-Array als Sammlung von INT (Array-Größe, die bei Compile-Time bekannt ist)
#enthalten / * foreach makro, das ein Array von int -Werten als Sammlung von int -Werten betrachtet */ #define foreach (intpvar, intarr) \ int* intpvar; \ für (intpvar = intarr; intpvar <(intarr +(sizeof (intarr)/sizeof (intarr [0]))); ++ intpvar) int hauptsächlich(int argc, verkohlen** argv) { int A1[] = {1, 1, 2, 3, 5, 8}; int A2[] = {3, 1, 4, 1, 5, 9}; für jeden (P1, A1) { printf("Schleife 1: %d\n", *P1); } für jeden (p2, A2) { printf("Schleife 2: %d\n", *p2); } Rückkehr 0; }
Allgemeine: String oder Array als Sammlung (Sammlungsgröße zur Laufzeit bekannt)
- Notiz:
idxtype
kann entfernt werden undTypof (col [0])
an seiner Stelle verwendet mit GCC
#enthalten #enthalten / * foreach makro, in dem ein Array von gegebener Typ als Sammlung von Werten des angegebenen Typs */angezeigt wird #define arraylen (arr) (sizeof (arr)/sizeof (arr [0])) #define foreach (idXtype, idxpvar, col, colsiz) \ idXType* idxpvar; \ für (idxpvar = col; idxpvar <(col +colSiz); ++ idxpvar) int hauptsächlich(int argc, verkohlen** argv) { verkohlen* C1 = "Sammlung"; int C2[] = {3, 1, 4, 1, 5, 9}; doppelt* C3; int C3len = 4; C3 = (doppelt*)CALLOC(C3len, Größe von(doppelt)); C3[0] = 1.2; C3[1] = 3.4; C3[2] = 5.6; C3[3] = 7.8; für jeden (verkohlen, P1, C1, Strlen(C1)) { printf("Schleife 1: %c\n", *P1); } für jeden (int, p2, C2, Arraylen(C2)) { printf("Schleife 2: %d\n", *p2); } für jeden (doppelt, p3, C3, C3len) { printf("Schleife 3:%.1LF\n", *p3); } Rückkehr 0; }
C#
Im C#Angenommen, Myarray ist eine Reihe von ganzen Zahlen:
für jeden (int x in myarray) { Konsole.Schreiben(x); }
Sprache integrierte Abfrage (Linq) liefert die folgende Syntax, um a zu akzeptieren delegieren oder Lambda -Ausdruck:
myarray.Auflisten().Für jeden(x => Konsole.Schreiben(x));
C ++
C ++ 11 Bietet eine Foreach -Schleife. Die Syntax ähnelt der von Java:
#enthalten int hauptsächlich() { int myint[] = {1, 2, 3, 4, 5}; zum (int i : myint) { std::Cout << i << '\n'; } }
C ++ 11 Range basierend für Aussagen wurde in implementiert in GNU Compiler -Sammlung (GCC) (seit Version 4.6), Klang (seit Version 3.0) und Visuell c ++ 2012 (Version 11 [8]))
Der Bereichsbasis zum
ist syntethischer Zucker gleichwertig:
zum (Auto __anon = Start(myint); __anon ! = Ende(myint); ++__anon) { Auto i = *__anon; std::Cout << i << '\n'; }
Der Compiler verwendet Argumentabhängige Suche um die zu beheben Start
und Ende
Funktionen.[9]
Die C ++ - Standardbibliothek unterstützt auch für jeden
,[10] Das wendet jedes Element auf eine Funktion an, die jede vordefinierte Funktion oder ein Lambda -Ausdruck sein kann. Während der Bereich für erst vom Anfang bis zum Ende ist, können Sie die Richtung oder den Bereich ändern, indem Sie die ersten beiden Parameter ändern.
#enthalten #enthalten // enthält std :: for_each #enthalten int hauptsächlich() { std::Vektor<int> v {1, 2, 3, 4, 5}; std::für jeden(v.Start(),, v.Ende(),, [] (int i) { std::Cout << i << '\n'; }); std::Cout << "Umgekehrt, aber 2 Elemente überspringen:\n"; std::für jeden(v.rbegin()+2, v.zerreißen(),, [] (int i) { std::Cout << i << '\n'; }); }
Qt, ein C ++ - Framework, bietet ein Makro, das für Schleifen zur Verfügung stellt[11] Verwenden der STL -Iterator -Schnittstelle:
#enthalten #enthalten int hauptsächlich() { Qlist<int> aufführen; aufführen << 1 << 2 << 3 << 4 << 5; für jeden (int i, aufführen) { Qdebug() << i; } }
Schub, Eine Reihe von kostenlosen, von Experten begutachteten tragbaren C ++-Bibliotheken enthält auch Forach-Loops:[12]
#enthalten #enthalten int hauptsächlich() { int myint[] = {1, 2, 3, 4, 5}; Boost_foreach(int &i, myint) { std::Cout << i << '\n'; } }
C ++/cli
Das C ++/cli Die Sprache schlägt ein ähnliches Konstrukt vor C#.
Angenommen, Myarray ist eine Reihe von ganzen Zahlen:
zum jeder (int x in myarray) { Konsole::Schreiben(x); }
ColdFusion Markup Sprache (CFML)
Skriptsyntax
// Arrays Arrayach[1,2,3,4,5], Funktion(v) { Recordput(v); }); // oder zum (v in [1,2,3,4,5]) { Recordput(v); } // oder // (nur Railo; nicht in Coldfusion unterstützt) Briefe = ["a","b","c","d","E"]; Letters.each(Funktion(v) { Recordput(v); // Abcde }); // Strukturen zum (k in Sammlung) { Recordput(Sammlung[k]); } // oder strukturiert(Sammlung, Funktion(k,v) { Recordput("Schlüssel: #K#, Wert: #V#; ""); }); // oder // (nur Railo; nicht in Coldfusion unterstützt) Sammlung.each(Funktion(k,v) { Recordput("Schlüssel: #K#, Wert: #V#; ""); });
Tag -Syntax
Index="V" Array="#['A', 'B', 'C', 'D', 'E']#"> #v#
CFML identifiziert den Wert als "Index" in diesem Konstrukt fälschlicherweise. das Index
Variable empfängt den tatsächlichen Wert des Array -Elements, nicht des Index.
Artikel="k" Sammlung="#Sammlung#"> #Sammlung[k]#
Common Lisp
Common Lisp Bietet für die Fähigkeit der Vermittlung entweder mit dem Dolist Makro:
(Dolist (i '(1 3 5 6 8 10 14 17)) (drucken i))
oder die Mächtigen Schleife Makro, um mehr Datentypen zu iterieren
(Schleife zum i in '(1 3 5 6 8 10 14 17) tun (drucken i))
und sogar mit dem MAPCAR Funktion:
(MAPCAR #'drucken '(1 3 5 6 8 10 14 17))
D
für jeden(Artikel; einstellen) { // etwas zu Gegenstand tun }
oder
für jeden(Streit) { // Wert bestehen }
Pfeil
zum (Finale Element in Somecollection) { // etwas mit Element mach }
Objekt Pascal, Delphi
Für die Unterstützung von Unterstützung wurde in hinzugefügt Delphi 2005 und verwendet eine Enumerator -Variable, die in der deklariert werden muss var Sektion.
zum Aufzähler in Sammlung tun Start // Mach hier etwas Ende;
Eiffel
Die Iteration (foreach) Form der Eiffel Das Schleifenkonstrukt wird durch das Schlüsselwort eingeführt across
.
In diesem Beispiel jedes Element der Struktur meine Liste
wird gedruckt:
über meine Liste wie IC Schleife drucken (IC.Artikel) Ende
Die lokale Einheit IC
ist eine Instanz der Bibliotheksklasse Iteration_Cursor
. Das Cursor -Feature Artikel
Bietet Zugriff auf jedes Strukturelement. Nachkommen der Klasse Iteration_Cursor
Kann erstellt werden, um spezialisierte Iterationsalgorithmen zu verarbeiten. Die Arten von Objekten, die iteriert werden können (meine Liste
im Beispiel) basieren auf Klassen, die aus der Bibliotheksklasse erben WIEDERHOLBAR
.
Die Iterationsform der Eiffelschleife kann auch als boolescher Ausdruck verwendet werden, wenn das Schlüsselwort Schleife
wird durch beide ersetzt alle
(Wirkung Universelle Quantifizierung) oder etwas
(Wirkung Existenzielle Quantifizierung).
Diese Iteration ist ein boolescher Ausdruck, der wahr ist, wenn alle Elemente in meine Liste
Zählungen von mehr als drei haben:
über meine Liste wie IC alle IC.Artikel.zählen > 3 Ende
Das Folgende ist wahr, wenn mindestens ein Artikel eine Anzahl von mehr als drei hat:
über meine Liste wie IC etwas IC.Artikel.zählen > 3 Ende
gehen
gehen's foreach Loop kann verwendet werden, um über ein Array, eine Scheibe, eine String, eine Karte oder einen Kanal zu schleifen.
Mit dem Zwei-Wert-Formular erhalten wir den Index/Schlüssel (erstes Element) und den Wert (zweites Element):
zum Index, Wert : = Angebot Somecollection { // etwas zum Index und Wert tue }
Mit dem Ein-Wert-Formular erhalten wir den Index/Schlüssel (erstes Element):
zum Index : = Angebot Somecollection { // etwas zum Index tue }
Groovig
Groovig Unterstützung zum Schleifen über Sammlungen wie Arrays, Listen und Bereiche:
def x = [1,2,3,4] zum (v in x) // Schleife über das 4-Element-Array x { println v } zum (v in [1,2,3,4])) // Schleife über 4-Element-Literalliste { println v } zum (v in 1..4) // Schleife über den Bereich 1..4 { println v }
Groovy unterstützt auch einen C-Stil für Schleife mit einem Array-Index:
zum (i = 0; i < x.Größe(); i++) { println x[i] }
Sammlungen in Groovy können auch über die Verwendung der iteriert werden jeder Schlüsselwort und eine Schließung. Standardmäßig wird der Schleifenschuhtummy benannt es
x.jeder{ println es } // Drucken Sie jedes Element des X -Arrays x.jeder{i-> println i} // Äquivalent zur obigen Linie, nur Schleifenschummel explizit "I" genannt "I"
Haskell
Haskell Ermöglicht das Schleifen über Listen mit monadisch Aktionen verwenden MAPM_
und bilden_
(MAPM_
mit seinen Argumenten geflippt) von Kontrolle.Monad:
Code | Drucke |
---|---|
MAPM_ drucken [1..4] | 1 2 3 4 |
bilden_ "Prüfung" $ \verkohlen -> tun Putchar verkohlen Putchar verkohlen | tteesstt |
Es ist auch möglich, diese Funktionen so zu verallgemeinern, dass sie eher an Anwendungsfunktionen als an Monaden und jeder Datenstruktur arbeiten, die mithilfe von Verwendungsgrad durchlaufen werden kann Traverse
(zum
mit seinen Argumenten umgedreht) und MAPM
(bilden
mit seinen Argumenten geflippt) von Data.traversable.
Haxe
zum (Wert in wiederholbar) { verfolgen(Wert); } Lambda.Iter(wiederholbar, Funktion(Wert) verfolgen(Wert));
Java
Im Java, ein für dasesconstruct wurde eingeführt in Java Entwickler-Kit (JDK) 1.5.0.[14]
Offizielle Quellen verwenden mehrere Namen für das Konstrukt. Es wird als "Enhanced for Loop" bezeichnet.[14] die "For-Each-Schleife",[15] und die "Foreach -Erklärung".[16]
zum (Typ Artikel : IterableCollection) { // etwas zu Gegenstand tun }
JavaScript
Das ECMascript 6 Standard hat für..of
Für die Iteration ohne Index ohne Generatoren, Arrays und mehr:
zum (var Artikel von Array) { // Sachen machen }
Alternativ funktionsbasierter Stil: [17]
Array.für jeden(Artikel => { // Sachen machen })
Für ungeordnete Iteration über die Schlüssel in einem Objekt, JavaScript zeigt das für in
Schleife:
zum (var Schlüssel in Objekt) { // Machen Sie Dinge mit Objekt [Schlüssel] }
Um die Iteration auf die Eigenschaften des Objekts zu beschränken, ohne die durch die Prototypkette geerbten, ist es manchmal nützlich, einen HasownProperty () -Test hinzuzufügen, Wenn er von der JavaScript -Engine unterstützt wird (Für Webkit/Safari bedeutet dies "in Version 3 oder später").
zum (var Schlüssel in Objekt) { wenn (Objekt.HasownProperty(Schlüssel)) { // Machen Sie Dinge mit Objekt [Schlüssel] } }
ECMascript 5 Bereitstellung von Object.Keys Methode, um die eigenen Schlüssel eines Objekts in ein Array zu übertragen.[18]
var Buchen = { Name: "Ein Weihnachtslied", Autor: "Charles Dickens" }; zum(var Schlüssel von Objekt.Schlüssel(Buchen)) { Alarm("PropertyName =" Schlüssel + "Eigenschaftswert =" + Buchen[Schlüssel]); }
Lua[19]
Nur durch numerische Indexwerte iterieren:
zum Index, Wert in Ipairs(Array) tun -- etwas tun Ende
Durch alle Indexwerte iterieren:
zum Index, Wert in Paare(Array) tun -- etwas tun Ende
Mathematica
Im Mathematica, Tun
Bewertet einfach einen Ausdruck für jedes Element einer Liste, ohne einen Wert zurückzugeben.
Im[]: = Tun[Dosomethitem mit, {Artikel, aufführen}]
Es ist häufiger zu verwenden Tisch
, was das Ergebnis jeder Bewertung in einer neuen Liste zurückgibt.
Im[]: = aufführen = {3, 4, 5}; Im[]: = Tisch[Artikel^2, {Artikel, aufführen}] aus[]= {9, 16, 25}
Matlab
zum Artikel = Array %etwas tun Ende
Minze
Für jede Schleifen werden in Mint unterstützt, die die folgende Syntax besitzen:
zum jeder Element von aufführen /* 'Etwas tun.' */ Ende
Das zum (;;)
oder während (wahr)
Endlosschleife in Minze kann mit einem für jede Schleife und ein geschrieben werden unendlich lange Liste.[20]
importieren Typ /* 'Diese Funktion wird auf' zugeordnet * 'Jede Indexnummer I der' ' * 'Unendlich lange Liste.' */ Sub Identität(x) Rückkehr x Ende /* 'Das Folgende erstellt die Liste' * '[0, 1, 2, 3, 4, 5, ..., Infinity]' */ Infinitelistin = aufführen(Identität) zum jeder Element von Infinitelistin /* 'Mach etwas für immer.' */ Ende
Ziel c
Foreach Loops, genannt Schnelle Aufzählung, werden beginnend unterstützt Ziel c 2.0. Sie können verwendet werden, um über jedes Objekt zu iterieren, das das NSFastEnumeration -Protokoll implementiert, einschließlich NSArray, NSDictionary (Iterates Over -Tasten), NSSet usw.
Nsarray *a = [Nsarray Neu]; // Jede Containerklasse kann ersetzt werden zum(Ich würde obj in a) { // Beachten Sie die dynamische Tippen (wir müssen das nicht wissen // Art des in 'a' gespeicherten Objekts. In der Tat kann es geben // viele verschiedene Arten von Objekten im Array. printf("%s\n", [[obj Bezeichnung] UTF8String]); // muss UTF8String mit %s verwenden Nslog(@"%@", obj); // als Objekt verlassen }
NSArrays können auch eine Nachricht an ihre Mitglieder senden:
Nsarray *a = [Nsarray Neu]; [a MakoBjectSperformselector:@Wähler(printdescription)];
Wo Blöcke Ein NSArray ist verfügbar, kann automatisch einen Block für jeden enthaltenen Element ausführen:
[myarray enumerateObjectsusingblock:^(Ich würde obj, Nsuinteger IDX, Bool *Pause) { Nslog(@"obj%@", obj); wenn [obj Sollte Intenation])) *Pause = JAWOHL; }];
Die Art der iterierten Sammlung diktiert den mit jeder Iteration zurückgegebenen Artikel. Zum Beispiel:
NSDictionary *d = [NSDictionary Neu]; zum(Ich würde Schlüssel in d) { NSOBJECT *obj = [d ObjectForkey:Schlüssel]; // Wir verwenden den (eindeutigen) Schlüssel, um auf das (möglicherweise nicht eindeutige) Objekt zuzugreifen. Nslog(@"%@", obj); }
Ocaml
Ocaml ist ein funktionale Sprache. Somit kann das Äquivalent einer foreach -Schleife als Bibliotheksfunktion über Listen und Arrays erreicht werden.
Für Listen:
Aufführen.Iter (Spaß x -> print_int x) [1;2;3;4] ;;
oder kurz:
Aufführen.Iter print_int [1;2;3;4] ;;
Für Arrays:
Array.Iter (Spaß x -> print_int x) [|1;2;3;4|] ;;
oder kurz:
Array.Iter print_int [|1;2;3;4|] ;;
Parasail
Das Parasail Die parallele Programmiersprache unterstützt verschiedene Arten von Iteratoren, einschließlich eines allgemeinen "Iterators" für jeden "Iterator über einem Container:
var Con : Container<Element_type> : = ... // ... zum jeder Elem von Con gleichzeitig Schleife // Schleife kann auch "vorwärts" oder "umgekehrt" oder nicht ordnungsgemäß sein (der Standard) // ... etwas mit Elem mach Ende Schleife
Parasail unterstützt auch Filter bei Iteratoren und die Fähigkeit, sich sowohl auf den Schlüssel als auch auf den Wert einer Karte zu beziehen. Hier ist eine Vorwärts -Iteration über die Elemente von "my_map", die nur Elemente auswählen, bei denen sich die Schlüssel in "my_set" befinden:
var My_map : Karte<Schlüsselart => Univ_string, Werttyp => Baum<Ganze Zahl>> : = ... Const My_set : Satz<Univ_string> : = ["ABC", "def", "Ghi"]; zum jeder [Str => Tr] von My_map {Str in My_set} nach vorne Schleife // ... etwas mit STR oder TR machen Ende Schleife
Pascal
Im Pascal, ISO Standard 10206: 1990 eingeführte Iteration über Setzen Sie Typen, daher:
var lt: Elementtype; ELTSET: einstellen von Elementtype; {...} zum lt in ELTSET tun {... etwas mit ELT} machen
Perl
Im Perl, für jeden (Dies entspricht dem kürzeren für) kann verwendet werden, um Elemente einer Liste zu durchqueren. Der Ausdruck, der die Sammlung angibt, die überschreiten soll, wird im Listenkontext bewertet und jedes Element der resultierenden Liste wird wiederum auf die Schleifenvariable hingewiesen.
Listen Sie ein wörtliches Beispiel: Beispiel:
für jeden (1, 2, 3, 4) { drucken $ _; }
Array -Beispiele:
für jeden (@arr) { drucken $ _; }
für jeden $ x (@arr) { #$ x ist das Element in @arr drucken $ x; }
Hash Beispiel:
für jeden $ x (Schlüssel %Hash) { drucken $ x . "=" . $ hash{$ x}; # $ x ist ein Schlüssel in %Hash und $ Hash {$ x} ist sein Wert }
Direkte Änderung der Sammlungsmitglieder:
@arr = ( "REMED-FOO", "Entfernen Sie Bar" ); für jeden $ x (@arr) { $ x = ~ s/entfernen-//; } # Jetzt @arr = ('foo', 'Bar');
Php
für jeden ($ set wie $ Wert) { // etwas zu $ Wert machen; }
Es ist auch möglich, sowohl Schlüssel als auch Werte unter Verwendung der alternativen Syntax zu extrahieren:
für jeden ($ set wie $ key => $ Wert) { Echo "{$ key} hat einen Wert von {$ Wert}"; }
Direkte Änderung der Sammlungsmitglieder:
$ arr = Array(1, 2, 3); für jeden ($ arr wie &$ Wert) { // beachten $ Wert++; } // jetzt $ arr = Array (2, 3, 4); // funktioniert auch mit der vollständigen Syntax für jeden ($ arr wie $ key => &$ Wert) { $ Wert++; }
Python
zum Artikel in iterable_collection: # Mach etwas mit Artikel
Pythons Tupelzuordnung, die in seiner Foreach -Schleife vollständig verfügbar ist assoziative Arrays:
zum Schlüssel, Wert in SONDICT.Artikel(): # Direkte Iteration auf einem Diktat iteriert seine Schlüssel # Sachen machen
Wie für in
ist die einzige Art von für Schleife in Python, das entspricht der in anderen Sprachen gefundenen "Zähler" -Schloop ist ...
zum i in Angebot(Len(seq)): # Mach etwas mit seq [i]
... obwohl ich die benutze aufzählen
Die Funktion wird als "pythonisch" angesehen:
zum i, Artikel in aufzählen(seq): # Machen Sie Sachen mit Artikel # Zuweisen Sie es möglicherweise SEQ [i] zurück zurück
Schläger
(zum [Artikel einstellen])) (DO-BISE-MIT Artikel))
oder mit dem konventionellen Schema für jeden
Funktion:
(für jeden DO-BISE-MIT eine Liste)
DO-BISE-MIT
ist eine Ein-Argument-Funktion.
Raku
Im Raku, eine Schwestersprache zu Perl, zum muss verwendet werden, um Elemente einer Liste zu durchqueren (für jeden ist nicht erlaubt). Der Ausdruck, der die Sammlung angibt, die überschreiten soll, wird in List-Kontext bewertet, aber standardmäßig nicht abgeflacht, und jedes Element der resultierenden Liste ist wiederum die Schleifenvariable (en).
Listen Sie ein wörtliches Beispiel: Beispiel:
zum 1..4 {.sagen; }
Array -Beispiele:
zum @arr {.sagen; }
Die for -Schleife in seiner Anweisung -Modifikatorform:
.sagen zum @arr;
zum @arr -> $ x { sagen $ x; }
zum @arr -> $ x, $ y { # mehr als ein Artikel gleichzeitig sagen "$ x, $ y"; }
Hash Beispiel:
zum Schlüssel %Hash -> $ key { sagen "$ key: $ hash {$ key}"; }
oder
zum %Hash.KV -> $ key, $ Wert { sagen "$ key: $ value"; }
oder
zum %Hash -> $ x { sagen "$ X.Key (): $ x.Value ()"; # Klammern mussten in die doppelt zitierte Zeichenfolge eintreten }
Direkte Modifikation von Sammlungsmitgliedern mit einem doppelt spitzen Block, <->:
mein @arr = 1,2,3;zum @arr <-> $ x { $ x *= 2; }# Jetzt @arr = 2,4,6;
Rubin
einstellen.jeder tun |Artikel| # etwas zu Gegenstand tun Ende
oder
zum Artikel in einstellen # etwas zu Gegenstand tun Ende
Dies kann auch mit einem Hash verwendet werden.
einstellen.jeder tun |Artikel,Wert| # etwas zu Gegenstand tun # etwas zu schätzen tu Ende
Rost
Das zum
Schleife hat die Struktur zum
. Es ruft die implizit die Incorator :: Into_iter
Methode für den Ausdruck und verwendet den resultierenden Wert, der das implementieren muss Iterator
Merkmal. Wenn der Ausdruck selbst ein Iterator ist, wird er direkt von dem verwendet zum
Schleife durch ein Implementierung von Literator
für alle Iterator
s Das gibt den Iterator unverändert zurück. Die Schleife ruft die an Iterator :: Weiter
Methode auf dem Iterator vor Ausführung des Schleifenkörpers. Wenn Iterator :: Weiter
kehrt zurück Etwas(_)
Der Wert im Inneren wird dem zugeordnet Muster und der Schleifenkörper wird ausgeführt; Wenn es zurückkehrt Keiner
Die Schleife wird beendet.
Lassen Mut Zahlen = VEC![1, 2, 3]; // unveränderliche Referenz: zum Nummer in &Zahlen { // Rufe Incoratorator :: Into_iter (& Nummern) an println!("{}", Nummer); } zum Quadrat in Zahlen.Iter().Karte(|x| x * x) { // number.iter (). map (| x | x * x) implementiert den Iterator println!("{}", Quadrat); } // Veränderliche Referenz: zum Nummer in &Mut Zahlen { // Rufe Incoratorator :: Into_iter (& Mut Nummern) an *Nummer *= 2; } // Drucke "[2, 4, 6]": println!("{:?}", Zahlen); // verbraucht den VEC und erstellt einen Iterator: zum Nummer in Zahlen { // Rufe Incoratorator :: Into_iter (Zahlen) an // ... } // Fehler mit "Ausleihen von bewegtem Wert": // println! ("{:?}", number);
Scala
// Rückgabeliste geänderter Elemente Artikel Karte { x => etwas tun(x) } Artikel Karte MultiplyBytwo zum {x <- Artikel} Ertrag etwas tun(x) zum {x <- Artikel} Ertrag MultiplyBytwo(x) // Nichts zurückgeben, einfach Aktion ausführen Artikel für jeden { x => etwas tun(x) } Artikel für jeden println zum {x <- Artikel} etwas tun(x) zum {x <- Artikel} println(x) // Musteranpassungsbeispiel für das Verständnis zum ((Schlüssel, Wert) <- Somemap) println(s"$Schlüssel -> $Wert")
Planen
(für jeden DO-BISE-MIT eine Liste)
DO-BISE-MIT
ist eine Ein-Argument-Funktion.
Smalltalk
Sammlung tun: [:Artikel| "Mach etwas zu Gegenstand" ]
Schnell
Schnell verwendet die zum
…in
Konstruktion, um Mitglieder einer Sammlung zu iterieren.[21]
zum Ding in Somecollection { // etwas mit Ding mach }
Das zum
…in
Die Schleife wird häufig mit den Konstrukten geschlossener und halber Öffnung verwendet, um eine bestimmte Anzahl von Male über den Schleifenkörper zu iterieren.
zum i in 0..<10 { // 0 .. <10 konstruiert einen halben Öffnungsbereich, also den Schleifenkörper // wird für i = 0, i = 1,…, i = 9 wiederholt. } zum i in 0...10 { // 0 ... 10 konstruiert einen geschlossenen Bereich, also den Schleifenkörper // wird für i = 0, i = 1,…, i = 9, i = 10 wiederholt. }
Systemverilog
Systemverilog unterstützt die Iteration über einen beliebigen Vektor- oder Array -Typ einer beliebigen Dimensionalität mit dem für jeden
Stichwort.
Ein triviales Beispiel iteriert über eine Reihe von ganzen Zahlen:
Code | Drucke |
---|---|
int Array_1d[] = '{ 3, 2, 1, 0 }; für jeden Array_1d[Index] $Anzeige("array_1d [ %0d]: %0d", Index, Array_1d[Index]); | Array_1d [0]: 3 Array_1d [1]: 2 Array_1d [2]: 1 Array_1d [3]: 0 |
Ein komplexeres Beispiel iteriert eine assoziative Reihe von Arrays von ganzen Zahlen:
Code | Drucke |
---|---|
int Array_2d[Saite][] = '{ "Zehn": '{ 10, 11 }, "zwanziger Jahre": '{ 20, 21 } }; für jeden Array_2d[Schlüssel,Index] $Anzeige("Array_2d [%s,%0d]:%0d", Schlüssel, Index, Array_2d[Schlüssel,Index]); | Array_2d [Tens, 0]: 10 Array_2d [TENS, 1]: 11 Array_2d [Zwanzig Jahre, 0]: 20 Array_2d [Zwanziger Jahre, 1]: 21 |
Tcl
Tcl Verwendet, um über Listen zu iterieren. Es ist möglich, mehr als eine Iteratorvariable anzugeben. In diesem Fall werden ihnen sequentielle Werte aus der Liste zugewiesen.
Code | Drucke |
---|---|
für jeden {i j} {1 2 3 4 5 6} { stellt "$ i $ j" } | 1 2 3 4 5 6 |
Es ist auch möglich, über mehr als eine Liste gleichzeitig zu iterieren. Im Folgenden i
nimmt sequentielle Werte der ersten Liste an, j
Sequentielle Werte der zweiten Liste:
Code | Drucke |
---|---|
für jeden i {1 2 3} j {a b c} { stellt "$ i $ j" } | 1 a 2 b 3 c |
Visual Basic .net
Zum Jeder Artikel Im Aufzählbar 'Mach etwas mit Gegenstand. Nächste
oder ohne Geben Sie Inferenz ein
Zum Jeder Artikel Wie Typ Im Aufzählbar 'Mach etwas mit Gegenstand. Nächste
Fenster
Konventioneller Befehlsprozessor
Rufen Sie eine Hypothetik an Frob
Befehl dreimal und geben Sie ihm jedes Mal einen Farbnamen.
C: \>ZUM %%a IN ( rot grün blau ) TUN Frob %%a
Windows PowerShell
für jeden ($ item in $ set) { # Mach etwas zu $ item }
Aus einer Pipeline
$ liste | Für jeden-Objekt {Schreibhost $ _} # oder die Aliase verwenden $ liste | für jeden {schreiben $ _} $ liste | % {schreiben $ _}
Xslt
select ="einstellen">
Siehe auch
Verweise
- ^ "D Programmiersprache
für jeden
Anweisung Dokumentation ". Digital Mars. Abgerufen 2008-08-04. - ^ "Swi-prolog-foreach/2". www.swi-prolog.org. Abgerufen 2020-02-10.
- ^ http://www.rebol.com.
{{}}
: Fehlen oder leer|title=
(Hilfe) - ^ http://www.red-lang.org.
{{}}
: Fehlen oder leer|title=
(Hilfe) - ^ "Vorgeschlagene ECMascript 4. Ausgabe - Sprachübersicht" (PDF). Abgerufen 2020-02-21.
- ^ "für jeden ... in". Abgerufen 2020-02-21.
- ^ "für in". Abgerufen 2020-02-21.
- ^ "C ++ 11 Funktionen in Visual C ++ 11 - Visual C ++ Team Blog - Site Home - MSDN -Blogs". Blogs.msdn.com. 2011-09-12. Abgerufen 2013-08-04.
- ^ "Bereichsbasis für Schleife (seit C ++ 11)". en.cppreference.com. Abgerufen 2018-12-03.
- ^ "std :: for_each - cppreference". en.cppreference.com. Abgerufen 2017-09-30.
- ^ "QT 4.2: Generische Container". Doc.qt.digia.com. Archiviert von das Original Am 2015-11-23. Abgerufen 2013-08-04.
- ^ Eric Niebler (2013-01-31). "Kapitel 9. Boost.foreach - 1.53.0". Boost.org. Abgerufen 2013-08-04.
- ^ "Bereichsklausel". Die GO -Programmiersprachenspezifikation.Die Go -Programmiersprache. Abgerufen 20. Oktober, 2013.
- ^ a b "Verbessert für Schleifen - dieses neue Sprachkonstrukt [...]" "Java -Programmiersprache, Abschnitt: Verbesserungen in JDK 5". Sun Microsystems, Inc. 2004. Abgerufen 2009-05-26.
- ^ "Die For-Each-Schleife" "Die For-Each-Schleife". Sun Microsystems, Inc. 2008. Abgerufen 2009-05-10.
- ^ "Implementieren dieser Schnittstelle ermöglicht es einem Objekt, das Ziel der" foreach "-serklärung" zu sein. "Iterbar (Java -Plattform SE 6)". Sun Microsystems, Inc. 2004. Abgerufen 2009-05-12.
- ^ "Array.Prototype.foreach () - JavaScript | Mdn".
- ^ "Object.keys". Mozilla Developer Network. Abgerufen 7. Mai, 2014.
- ^ "Lua -Programmierung/Tabellen - Wikibooks, offene Bücher für eine offene Welt". en.wikibooks.org. Abgerufen 2017-12-06.
- ^ Chu, Oliver. "Minz -Tutorial". Abgerufen 20. Oktober 2013.
- ^ "Steuerfluss - Die Swift -Programmiersprache (Swift 5.5)".
- ^ "XSLT <XSL: For-Each> Element". W3schools.com.