for-each loop
   HOME

TheInfoList



OR:

In
computer programming Computer programming is the process of performing a particular computation (or more generally, accomplishing a specific computing result), usually by designing and building an executable computer program. Programming involves tasks such as anal ...
, foreach loop (or for each loop) is a
control flow In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an ''im ...
statement for traversing items in a collection. is usually used in place of a standard loop statement. Unlike other loop constructs, however, loops usually maintain no explicit counter: they essentially say "do this to everything in this set", rather than "do this times". This avoids potential
off-by-one error An off-by-one error or off-by-one bug (known by acronyms OBOE, OBO, OB1 and OBOB) is a logic error involving the discrete equivalent of a boundary condition. It often occurs in computer programming when an iterative loop iterates one time too m ...
s and makes code simpler to read. In
object-oriented Object-oriented programming (OOP) is a programming paradigm based on the concept of " objects", which can contain data and code. The data is in the form of fields (often known as attributes or ''properties''), and the code is in the form of p ...
languages, an
iterator In computer programming, an iterator is an object that enables a programmer to traverse a container, particularly lists. Various types of iterators are often provided via a container's interface. Though the interface and semantics of a given iterat ...
, even if implicit, is often used as the means of traversal. The statement in some languages has some defined order, processing each item in the collection from the first to the last. The statement in many other languages, especially
array programming In computer science, array programming refers to solutions which allow the application of operations to an entire set of values at once. Such solutions are commonly used in computational science, scientific and engineering settings. Modern progr ...
languages, does not have any particular order. This simplifies
loop optimization In compiler theory, loop optimization is the process of increasing execution speed and reducing the overheads associated with loops. It plays an important role in improving cache performance and making effective use of parallel processing capabi ...
in general and in particular allows
vector processing In computing, a vector processor or array processor is a central processing unit (CPU) that implements an instruction set where its instructions are designed to operate efficiently and effectively on large one-dimensional arrays of data called ...
of items in the collection concurrently.


Syntax

Syntax varies among languages. Most use the simple word for, roughly as follows: for each item in collection: do something to item


Language support

Programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
s which support foreach loops include
ABC ABC are the first three letters of the Latin script known as the alphabet. ABC or abc may also refer to: Arts, entertainment, and media Broadcasting * American Broadcasting Company, a commercial U.S. TV broadcaster ** Disney–ABC Television ...
,
ActionScript ActionScript is an object-oriented programming language originally developed by Macromedia Inc. (later acquired by Adobe). It is influenced by HyperTalk, the scripting language for HyperCard. It is now an implementation of ECMAScript (meaning ...
,
Ada Ada may refer to: Places Africa * Ada Foah, a town in Ghana * Ada (Ghana parliament constituency) * Ada, Osun, a town in Nigeria Asia * Ada, Urmia, a village in West Azerbaijan Province, Iran * Ada, Karaman, a village in Karaman Province, ...
,
C++11 C++11 is a version of the ISO/ IEC 14882 standard for the C++ programming language. C++11 replaced the prior version of the C++ standard, called C++03, and was later replaced by C++14. The name follows the tradition of naming language versions b ...
, C Sharp (programming language), C#, ColdFusion Markup Language (CFML), Cobra (programming language), Cobra, D (programming language), D, Daplex (query language), Delphi (software), Delphi, ECMAScript, Erlang (programming language), Erlang, Java (programming language), Java (since 1.5), JavaScript, Lua (programming language), Lua, Objective-C (since 2.0), ParaSail (programming language), ParaSail, Perl, PHP, Prolog, Python (programming language), Python, R (programming language), R, REALbasic, Rebol (programming language), Rebol, Red (programming language), Red, Ruby (programming language), Ruby, Scala (programming language), Scala, Smalltalk, Swift (programming language), Swift, Tcl, tcsh, Unix shells, Visual Basic .NET, and Windows PowerShell. Notable languages without foreach are C (programming language), C, and C++ pre-C++11.


ActionScript 3.0

ActionScript ActionScript is an object-oriented programming language originally developed by Macromedia Inc. (later acquired by Adobe). It is influenced by HyperTalk, the scripting language for HyperCard. It is now an implementation of ECMAScript (meaning ...
supports the ECMAScript 4.0 Standard for for each .. in which pulls the value at each index. var foo:Object = ; for each (var value:int in foo) // returns "1" then "2" It also supports for .. in which pulls the key at each index. for (var key:String in foo) // returns "apple" then "orange"


Ada

Ada Ada may refer to: Places Africa * Ada Foah, a town in Ghana * Ada (Ghana parliament constituency) * Ada, Osun, a town in Nigeria Asia * Ada, Urmia, a village in West Azerbaijan Province, Iran * Ada, Karaman, a village in Karaman Province, ...
supports foreach loops as part of the normal for loop. Say X is an Array data structure, array: for I in X'Range loop X (I) := Get_Next_Element; end loop; This syntax is used on mostly arrays, but will also work with other types when a full iteration is needed. Ada 2012 has generalized loops to foreach loops on any kind of container (array, lists, maps...): for Obj of X loop -- Work on Obj end loop;


C

The C (programming language), C language does not have collections or a foreach construct. However, it has several standard data structures that can be used as collections, and foreach can be made easily with a C macro, macro. However, two obvious problems occur: * The macro is unhygienic: it declares a new variable in the existing scope which remains after the loop. * One foreach macro cannot be defined that works with different collection types (e.g., array and linked list) or that is extensible to user types. C string as a collection of char #include /* foreach macro viewing a string as a collection of char values */ #define foreach(ptrvar, strvar) \ char* ptrvar; \ for (ptrvar = strvar; (*ptrvar) != '\0'; *ptrvar++) int main(int argc, char** argv) C int array as a collection of int (array size known at compile-time) #include /* foreach macro viewing an array of int values as a collection of int values */ #define foreach(intpvar, intarr) \ int* intpvar; \ for (intpvar = intarr; intpvar < (intarr + (sizeof(intarr)/sizeof(intarr[0]))); ++intpvar) int main(int argc, char** argv) Most general: string or array as collection (collection size known at run-time) : ''Note: can be removed and typeof(col[0]) used in its place with GNU Compiler Collection, GCC'' #include #include /* foreach macro viewing an array of given type as a collection of values of given type */ #define arraylen(arr) (sizeof(arr)/sizeof(arr[0])) #define foreach(idxtype, idxpvar, col, colsiz) \ idxtype* idxpvar; \ for (idxpvar = col; idxpvar < (col + colsiz); ++idxpvar) int main(int argc, char** argv)


C#

In C Sharp (programming language), C#, assuming that myArray is an array of integers: foreach (int x in myArray) Language Integrated Query (LINQ) provides the following syntax, accepting a Delegate (CLI), delegate or Lambda (programming), lambda expression: myArray.ToList().ForEach(x => Console.WriteLine(x));


C++

C++11 C++11 is a version of the ISO/ IEC 14882 standard for the C++ programming language. C++11 replaced the prior version of the C++ standard, called C++03, and was later replaced by C++14. The name follows the tradition of naming language versions b ...
provides a foreach loop. The syntax is similar to that of Foreach loop#Java, Java: #include int main() C++11 range-based for statements have been implemented in GNU Compiler Collection (GCC) (since version 4.6), Clang (since version 3.0) and Visual C++ 2012 (version 11 ) The range-based for is syntactic sugar equivalent to: for (auto __anon = begin(myint); __anon != end(myint); ++__anon) The compiler uses argument-dependent lookup to resolve the begin and end functions. The C++ Standard Library also supports for_each, that applies each element to a function, which can be any predefined function or a lambda expression. While range-based for is only from the beginning to the end, the range and direction you can change the direction or range by altering the first two parameters. #include #include // contains std::for_each #include int main() Qt (software), Qt, a C++ framework, offers a macro providing foreach loops using the STL iterator interface: #include #include int main() Boost (C++ libraries), Boost, a set of free peer-reviewed portable C++ libraries also provides foreach loops: #include #include int main()


C++/CLI

The C++/CLI language proposes a construct similar to C#. Assuming that myArray is an array of integers: for each (int x in myArray)


ColdFusion Markup Language (CFML)


Script syntax

// arrays arrayeach([1,2,3,4,5], function(v)); // or for (v in [1,2,3,4,5]) // or // (Railo only; not supported in ColdFusion) letters = ["a","b","c","d","e"]; letters.each(function(v)); // structs for (k in collection) // or structEach(collection, function(k,v)); // or // (Railo only; not supported in ColdFusion) collection.each(function(k,v));


Tag syntax

#v# CFML incorrectly identifies the value as "index" in this construct; the index variable does receive the actual value of the array element, not its index. #collection[k]#


Common Lisp

Common Lisp provides foreach ability either with the ''dolist'' macro: (dolist (i '(1 3 5 6 8 10 14 17)) (print i)) or the powerful ''loop'' macro to iterate on more data types (loop for i in '(1 3 5 6 8 10 14 17) do (print i)) and even with the ''mapcar'' function: (mapcar #'print '(1 3 5 6 8 10 14 17))


D

foreach(item; set) or foreach(argument)


Dart

for (final element in someCollection)


Object Pascal, Delphi

Foreach support was added in Delphi (programming language), Delphi 2005, and uses an enumerator variable that must be declared in the ''var'' section. for enumerator in collection do begin //do something here end;


Eiffel

The iteration (foreach) form of the Eiffel (programming language), Eiffel loop construct is introduced by the keyword across. In this example, every element of the structure my_list is printed: across my_list as ic loop print (ic.item) end The local entity ic is an instance of the library class ITERATION_CURSOR. The cursor's feature item provides access to each structure element. Descendants of class ITERATION_CURSOR can be created to handle specialized iteration algorithms. The types of objects that can be iterated across (my_list in the example) are based on classes that inherit from the library class ITERABLE. The iteration form of the Eiffel loop can also be used as a boolean expression when the keyword loop is replaced by either all (effecting universal quantification) or some (effecting existential quantification). This iteration is a boolean expression which is true if all items in my_list have counts greater than three: across my_list as ic all ic.item.count > 3 end The following is true if at least one item has a count greater than three: across my_list as ic some ic.item.count > 3 end


Go

Go (programming language), Go's foreach loop can be used to loop over an array, slice, string, map, or channel. Using the two-value form, we get the index/key (first element) and the value (second element): for index, value := range someCollection Using the one-value form, we get the index/key (first element): for index := range someCollection


Groovy

Groovy (programming language), Groovy supports ''for'' loops over collections like arrays, lists and ranges: def x = [1,2,3,4] for (v in x) // loop over the 4-element array x for (v in [1,2,3,4]) // loop over 4-element literal list for (v in 1..4) // loop over the range 1..4 Groovy also supports a C-style for loop with an array index: for (i = 0; i < x.size(); i++) Collections in Groovy can also be iterated over using the ''each'' keyword and a closure. By default, the loop dummy is named ''it'' x.each // print every element of the x array x.each // equivalent to line above, only loop dummy explicitly named "i"


Haskell

Haskell (programming language), Haskell allows looping over lists with Monad (functional programming), monadic actions using mapM_ and forM_ (mapM_ with its arguments flipped) fro
Control.Monad
It's also possible to generalize those functions to work on applicative functors rather than monads and any data structure that is traversable using traverse (for with its arguments flipped) and mapM (forM with its arguments flipped) fro


Haxe

for (value in iterable) Lambda.iter(iterable, function(value) trace(value));


Java

In Java (programming language), Java, a foreach-construct was introduced in Java Development Kit (JDK) 1.5.0. "Enhanced for Loop - This new language construct[...]" Official sources use several names for the construct. It is referred to as the "Enhanced for Loop", the "For-Each Loop", and the "foreach statement". for (Type item : iterableCollection) Java also provides the stream api since java 8: List intList = List.of(1, 2, 3, 4); intList.stream().forEach(i -> System.out.println(i));


JavaScript

The ECMAScript 6 standard has for..of
/code> for index-less iteration over generators, arrays and more: for (var item of array) Alternatively, function-based style: array.forEach(item => ) For unordered iteration over the keys in an Object, JavaScript features the for...in loop: for (var key in object) To limit the iteration to the object's own properties, excluding those inherited through the prototype chain, it is sometimes useful to add a hasOwnProperty() test, if supported by the JavaScript engine (for WebKit/Safari, this means "in version 3 or later"). for (var key in object) ECMAScript 5 provided Object.keys method, to transfer the own keys of an object into array. var book = ; for(var key of Object.keys(book))


Lua

Iterate only through numerical index values: for index, value in ipairs(array) do -- do something end Iterate through all index values: for index, value in pairs(array) do -- do something end


Mathematica

In Mathematica, Do will simply evaluate an expression for each element of a list, without returning any value. In[]:= Do[doSomethingWithItem, ] It is more common to use Table, which returns the result of each evaluation in a new list. In[]:= list = ; In[]:= Table[item^2, ] Out[]=


MATLAB

for item = array %do something end


Mint

For each loops are supported in Mint, possessing the following syntax: for each element of list /* 'Do something.' */ end The for (;;) or while (true) infinite loop in Mint can be written using a for each loop and an Infinite set, infinitely long list. import type /* 'This function is mapped to' * 'each index number i of the' * 'infinitely long list.' */ sub identity(x) return x end /* 'The following creates the list' * '[0, 1, 2, 3, 4, 5, ..., infinity]' */ infiniteList = list(identity) for each element of infiniteList /* 'Do something forever.' */ end


Objective-C

Foreach loops, called Objective-C#Fast enumeration, Fast enumeration, are supported starting in Objective-C 2.0. They can be used to iterate over any object that implements the NSFastEnumeration protocol, including NSArray, NSDictionary (iterates over keys), NSSet, etc. NSArray *a = [NSArray new]; // Any container class can be substituted for(id obj in a) NSArrays can also broadcast a message to their members: NSArray *a = [NSArray new]; [a makeObjectsPerformSelector:@selector(printDescription)]; Where Blocks (C language extension), blocks are available, an NSArray can automatically perform a block on every contained item: [myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) ]; The type of collection being iterated will dictate the item returned with each iteration. For example: NSDictionary *d = [NSDictionary new]; for(id key in d)


OCaml

OCaml is a functional language. Thus, the equivalent of a foreach loop can be achieved as a library function over lists and arrays. For lists: List.iter (fun x -> print_int x) [1;2;3;4];; or in short way: List.iter print_int [1;2;3;4];; For arrays: Array.iter (fun x -> print_int x) [, 1;2;3;4, ];; or in short way: Array.iter print_int [, 1;2;3;4, ];;


ParaSail

The ParaSail (programming language), ParaSail parallel programming language supports several kinds of iterators, including a general "for each" iterator over a container: var Con : Container := ... // ... for each Elem of Con concurrent loop // loop may also be "forward" or "reverse" or unordered (the default) // ... do something with Elem end loop ParaSail also supports filters on iterators, and the ability to refer to both the key and the value of a map. Here is a forward iteration over the elements of "My_Map" selecting only elements where the keys are in "My_Set": var My_Map : Map Univ_String, Value_Type => Tree> := ... const My_Set : Set := ["abc", "def", "ghi"]; for each [Str => Tr] of My_Map forward loop // ... do something with Str or Tr end loop


Pascal

In Pascal (programming language), Pascal, ISO standard 10206:1990 introduced iteration over Pascal (programming language)#Set types, set types, thus: var elt: ElementType; eltset: set of ElementType; for elt in eltset do


Perl

In Perl, ''foreach'' (which is equivalent to the shorter for) can be used to traverse elements of a list. The expression which denotes the collection to loop over is evaluated in list-context and each item of the resulting list is, in turn, aliased to the loop variable. List literal example: foreach (1, 2, 3, 4) Array examples: foreach (@arr) foreach $x (@arr) Hash example: foreach $x (keys %hash) Direct modification of collection members: @arr = ( 'remove-foo', 'remove-bar' ); foreach $x (@arr) # Now @arr = ('foo', 'bar');


PHP

foreach ($set as $value) It is also possible to extract both keys and values using the alternate syntax: foreach ($set as $key => $value) Direct modification of collection members: $arr = array(1, 2, 3); foreach ($arr as &$value) // Now $arr = array(2, 3, 4); // also works with the full syntax foreach ($arr as $key => &$value)
More information


Python

for item in iterable_collection: # Do something with item Python's tuple assignment, fully available in its foreach loop, also makes it trivial to iterate on (key, value) pairs in associative arrays: for key, value in some_dict.items(): # Direct iteration on a dict iterates on its keys # Do stuff As for ... in is the only kind of for loop in Python, the equivalent to the "counter" loop found in other languages is... for i in range(len(seq)): # Do something to seq[i] ... though using the enumerate function is considered more "Pythonic": for i, item in enumerate(seq): # Do stuff with item # Possibly assign it back to seq[i]


R

for (item in object) As for ... in is the only kind of for loop in R, the equivalent to the "counter" loop found in other languages is... for (i in seq_along(object))


Racket

(for ([item set]) (do-something-with item)) or using the conventional Scheme for-each function: (for-each do-something-with a-list) do-something-with is a one-argument function.


Raku

In Raku (programming language), Raku, a sister language to Perl, ''for'' must be used to traverse elements of a list (''foreach'' is not allowed). The expression which denotes the collection to loop over is evaluated in list-context, but not flattened by default, and each item of the resulting list is, in turn, aliased to the loop variable(s). List literal example: for 1..4 Array examples: for @arr The for loop in its statement modifier form: .say for @arr; for @arr -> $x for @arr -> $x, $y Hash example: for keys %hash -> $key or for %hash.kv -> $key, $value or for %hash -> $x Direct modification of collection members with a doubly pointy block, ''<->'': my @arr = 1,2,3; for @arr <-> $x # Now @arr = 2,4,6;


Ruby

set.each do , item, # do something to item end or for item in set # do something to item end This can also be used with a hash. set.each do , item,value, # do something to item # do something to value end


Rust

The for loop has the structure for in . It implicitly calls th
IntoIterator::into_iter
method on the expression, and uses the resulting value, which must implement th

trait. If the expression is itself an iterator, it is used directly by the for loop through a

that returns the iterator unchanged. The loop calls the Iterator::next method on the iterator before executing the loop body. If Iterator::next returns option type, Some(_), the value inside is assigned to the pattern matching, pattern and the loop body is executed; if it returns None, the loop is terminated. let mut numbers = vec![1, 2, 3]; // Immutable reference: for number in &numbers for square in numbers.iter().map(, x, x * x) // Mutable reference: for number in &mut numbers // prints "[2, 4, 6]": println!("", numbers); // Consumes the Vec and creates an Iterator: for number in numbers // Errors with "borrow of moved value": // println!("", numbers);


Scala

// return list of modified elements items map items map multiplyByTwo for yield doSomething(x) for yield multiplyByTwo(x) // return nothing, just perform action items foreach items foreach println for doSomething(x) for println(x) // pattern matching example in for-comprehension for ((key, value) <- someMap) println(s"$key -> $value")


Scheme

(for-each do-something-with a-list) do-something-with is a one-argument function.


Smalltalk

collection do: [:item, "do something to item" ]


Swift

Swift (programming language), Swift uses the forin construct to iterate over members of a collection. for thing in someCollection The forin loop is often used with the closed and half-open range constructs to iterate over the loop body a certain number of times. for i in 0..<10 for i in 0...10


SystemVerilog

SystemVerilog supports iteration over any vector or array type of any dimensionality using the foreach keyword. A trivial example iterates over an array of integers: A more complex example iterates over an associative array of arrays of integers:


Tcl

Tcl uses foreach to iterate over lists. It is possible to specify more than one iterator variable, in which case they are assigned sequential values from the list. It is also possible to iterate over more than one list simultaneously. In the following i assumes sequential values of the first list, j sequential values of the second list:


Visual Basic .NET

For Each item In enumerable ' Do something with item. Next or without type inference For Each item As type In enumerable ' Do something with item. Next


Windows


Conventional command processor

Invoke a hypothetical frob command three times, giving it a color name each time. C:\>FOR %%a IN ( red green blue ) DO frob %%a


Windows PowerShell

foreach ($item in $set) From a pipeline $list , ForEach-Object # or using the aliases $list , foreach $list , %


XSLT


See also

* Do while loop * For loop * While loop * Map (higher-order function)


References

{{Reflist, 2 Articles with example Ada code Articles with example Perl code Articles with example PHP code Articles with example Python (programming language) code Articles with example Racket code Articles with example Smalltalk code Articles with example Tcl code Control flow Programming language comparisons Articles with example Java code Articles with example Haskell code ru:Цикл просмотра