World Library  
Flag as Inappropriate
Email this Article

Foreach loop

For each loops are almost always used to iterate over items in a sequence of elements.

For each (or foreach) is a computer language idiom for traversing items in a collection. Foreach is usually used in place of a standard for statement. Unlike other for loop constructs, however, foreach loops[1][2] usually maintain no explicit counter: they essentially say "do this to everything in this set", rather than "do this x times". This avoids potential off-by-one errors and makes code simpler to read. In object-oriented languages an iterator, even if implicit, is often used as the means of traversal.


  • Syntax 1
  • Language support 2
    • ActionScript 2.1
    • Ada 2.2
    • C 2.3
    • C# 2.4
    • C++ 2.5
    • C++/CLI 2.6
    • CFML 2.7
      • Script syntax 2.7.1
      • Tag syntax 2.7.2
    • Common Lisp 2.8
    • D 2.9
    • Dart 2.10
    • Delphi 2.11
    • Eiffel 2.12
    • Go 2.13
    • Groovy 2.14
    • Haskell 2.15
    • Haxe 2.16
    • Java 2.17
    • JavaScript 2.18
    • MATLAB 2.19
    • Mint 2.20
    • Objective-C 2.21
    • OCaml 2.22
    • ParaSail 2.23
    • Pascal 2.24
    • Perl 2.25
    • PHP 2.26
    • Python 2.27
    • Racket 2.28
    • Ruby 2.29
    • Scala 2.30
    • Scheme 2.31
    • Smalltalk 2.32
    • Swift 2.33
    • SystemVerilog 2.34
    • Tcl 2.35
    • Visual Basic .NET 2.36
    • Windows PowerShell 2.37
    • XSL 2.38
  • See also 3
  • References 4


Syntax varies among languages. Most use the simple word for, roughly as follows:

for each item in collection:
  do something to item

Language support

Some of the languages with support for foreach loops include ABC, ActionScript, Ada, C++11, C#, CFML, Cobra, D, Daplex (a query language), ECMAScript, Erlang, Java (since 1.5, using the reserved word for for the for loop and the foreach loop), JavaScript, Objective-C (since 2.0), ParaSail, Perl, PHP, Python, REALbasic, Ruby, Scala, Smalltalk, Swift, Tcl, tcsh, Unix shells, Visual Basic .NET and Windows PowerShell. Notable languages without foreach are C and C++ prior to C++11.


ActionScript supports foreach loops by key/index and by value:

for ( var key:String in someObject ) {
   var value = someObject[key];
   trace( "someObject[" + key + "] = " + someObject[key] );

for each ( var value in someArray ) {
   trace( typeof value + " " + value );
someArray could be any object and someObject could be an array, but typical usage is as shown.


Ada supports foreach loops as part of the normal for loop. Say X is an array:

for I in X'Range loop
   X (I) := Get_Next_Element;
end loop;
This syntax is mostly used on 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;


The C language does not have collections or a foreach construct. It does, however, have a number of standard data structures that can be thought of as collections, and foreach can easily be made with a macro.

However, there are two obvious problems:

  • The macro is unhygienic - it declares a new variable in the existing scope which remains after the loop.
  • You can't define a single foreach macro 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

1 #include 
 2 #include 
 3 /* foreach macro for using a string as a collection of char */
 4 #define foreach( ptrvar, strvar ) char* ptrvar; for( ptrvar=strvar ; (*ptrvar) != '\0' ; *ptrvar++)
 6 int main(int argc,char* argv[]){
 7 char* s1 = "abcdefg";
 8 char* s2 = "123456789";
 9 foreach (p1, s1) {
10  printf("loop 1 %c\n",*p1);
11 }
12 foreach (p2, s2){
13  printf("loop 2 %c\n",*p2);
14 }
15 exit(0);
16 return(0);
17 }

C int array as a collection of int (array size known at compile-time)

1 #include 
 2 #include 
 3 int main(int argc, char* argv[]){
 4 /* foreach macro viewing an array of int values as a collection of int values */
 5 #define foreach( intpvar, intary ) int* intpvar; for( intpvar=intary; intpvar < (intary + (sizeof(intary)/sizeof(intary[0]))) ; intpvar++)
 6 int a1[] = { 1, 1, 2, 3, 5, 8 };
 7 int a2[] = { 3, 1, 4, 1, 5, 9 };
 8 foreach (p1, a1) {
 9  printf("loop 1 %d\n", *p1);
10 }
11 foreach (p2, a2){
12  printf("loop 2 %d\n", *p2);
13 }
14 exit(0);
15 return(0);
16 }

Most general: string or array as collection (collection size known at run-time)

Note: idxtype can be removed and typeof(col[0]) used in its place with GCC
1 #include 
 2 #include 
 3 #include 
 4 int main(int argc, char* argv[]){
 5 #define foreach(idxtype, idxpvar, col, colsiz ) idxtype* idxpvar; for( idxpvar=col ; idxpvar < (col + (colsiz)) ; idxpvar++)
 6 #define arraylen( ary ) ( sizeof(ary)/sizeof(ary[0]) )
 7 char* c1 = "collection";
 8 int c2[] = { 3, 1, 4, 1, 5, 9 };
 9 double* c3;
10 int c3len = 4;
11 c3 = (double*)calloc(c3len, sizeof(double)); 
12 c3[0] = 1.2; c3[1] = 3.4; c3[2] = 5.6; c3[3] = 7.8;
14 foreach (char, p1, c1, strlen(c1) ) {
15  printf("loop 1 : %c\n",*p1);
16 }
17 foreach (int, p2, c2, arraylen(c2) ){
18  printf("loop 2 : %d\n",*p2);
19 }
20 foreach (double, p3, c3, c3len ){
21  printf("loop 3 : %3.1lf\n",*p3);
22 }
23 exit(0);
24 return(0);
25 }


Assuming that myArray is an array of integers:

foreach (int x in myArray) { Console.WriteLine(x); }

LINQ provides the following syntax, accepting a delegate or lambda expression:

myArray.ToList().ForEach(x => Console.WriteLine(x));


C++11 provides a foreach loop. The syntax is similar to that of Java:


int main()
  int myint[] = {1,2,3,4,5};

  for (int i : myint)
    std::cout << i << std::endl;

Currently, C++11 range-based for statements have been implemented in GCC (since version 4.6), clang (since version 3.0) and Visual C++ 2012 (version 11 [3])

Qt, a C++ framework, offers a macro providing foreach loops[4] using the STL iterator interface:


int main()
  QList list;

  list << 1 << 2 << 3 << 4 << 5;

  foreach (int i, list)
    qDebug() << i;

Boost, a set of free peer-reviewed portable C++ libraries also provides foreach loops:[5]

int main()
  int myint[] = {1,2,3,4,5};
  BOOST_FOREACH(int &i, myint)
    std::cout << i << std::endl;


The C++/CLI language proposes a construct similar to C#.

Assuming that myArray is an array of integers:

   for each (int x in myArray)


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"];
    writeOutput(v); // abcde

// structs
for (k in collection){

// or

structEach(collection, function(k,v){
    writeOutput("key: #k#, value: #v#;");

// or
// (Railo only; not supported in ColdFusion)
    writeOutput("key: #k#, value: #v#;");

Tag syntax


Note that 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.


Common Lisp

Common Lisp provides foreach functionality either with the dolist macro:

(dolist (i '(1 3 5 6 8 10 14 17))
  (print i))

or with the mapcar function:

(mapcar #'print '(1 3 5 6 8 10 14 17))


foreach(item; set) {
  // do something to item
foreach(argument) {
  // pass value


for (final element in someCollection) {
  // do something with element


Foreach support was added in Delphi 2005, and uses an enumerator variable that must be declared in the var section.

for enumerator in collection do
  //do something here


The iteration (foreach) form of the 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'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 {
        // Do something to index and value

Using the one-value form, we get the index/key (first element):

for index := range someCollection {
        // Do something to index


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
    println v

for (v in [1,2,3,4])   // loop over 4-element literal list 
    println v

for (v in 1..4)        // loop over the range 1..4
    println v

Groovy also supports a C-style for loop with an array index:

for (i = 0; i < x.size(); i++)
    println x[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{ println it }     // print every element of the x array
x.each{i-> println i}    // equivalent to line above, only loop dummy explicitly named "i"


One can loop over lists with monadic actions using mapM_ and forM_ (mapM_ with its arguments flipped) from Control.Monad:

code prints
mapM_ print [1..4]
forM_ "test" $ \char -> do 
    putChar char
    putChar char

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) from Data.Traversable.


for (value in iterable) {

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


A foreach-construct was introduced in JDK 1.5.0.[7]

Official sources use several names for the construct. It is referred to as the "Enhanced for Loop",[7] the "For-Each Loop",[8] and the "foreach statement".[9]

for (type item: iterableCollection) {
    // Do something to item


For unordered iteration over the keys in an Object, JavaScript features the loop:

for (var key in object) {
    // Do stuff with object[key]

In order to limit the iteration to the object's own properties, excluding the ones 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) {
    if (object.hasOwnProperty(key)) {
        // Do stuff with object[key]

In ECMAScript 5 it is possible to use the keys method of the Object function to iterate over the own keys of an object more naturally. [10]

var book = { name: "A Christmas Carol", author: "Charles Dickens" }; 
Object.keys(book).forEach(function (key, index) {
    alert("PropertyName = " key + " Property Value = " + book[key]);

In ECMAScript 5 it's also possible to use the forEach method of a native array.[11]

var animals = ['dog', 'cat', 'bear'];
animals.forEach(function(animal, index) {
    alert(index + ':' + animal); // '0:dog', '1:cat', '2:bear'

Gecko’s JavaScript engine also has a for statement, which iterates over the values in the object, not the keys.[12]

Also note that it is inadvisable to use either a or for statement on an Array object in JavaScript, due to the above issue of properties inherited from prototypes, and also because it only iterates over existent keys and is not guaranteed to iterate over the elements in any particular order.[13] A regular C-style for loop should be used instead. The EcmaScript 6 standard has for..of for index-less iteration over generators, arrays and more.


for item = array
%do something


For each loops are supported in Mint, possessing the following syntax:

for each element of list
    /* 'Do something.' */

Interestingly enough, the for (;;) or while (true) infinite loop in Mint can be written using a for each loop and an infinitely long list.[14]

import type
/* 'This function is mapped to'
 * 'each index number i of the'
 * 'infinitely long list.'
sub identity(x)
    return x
/* 'The following creates the list'
 * '[0, 1, 2, 3, 4, 5, ..., infinity]'
infiniteList = list(identity)
for each element of infiniteList
    /* 'Do something forever.' */


Foreach loops, called 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) {                // Note the dynamic typing (we do not need to know the
                                  // Type of object stored in 'a'.  In fact, there can be
                                  // many different types of object in the array.

    printf("%s\n", ;

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) {
    NSObject *obj = [d objectForKey:key];      // We use the (unique) key to access the (possibly non-unique) object.
    NSLog(@"%@", obj);


Since OCaml is a functional language, 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|];;


The 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, as well as 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 {Str in My_Set} forward loop
   // ... do something with Str or Tr
end loop


The ISO 10206:1990 standard introduced iteration over set types in Pascal:

  elt: ElementType;
  eltset: set of ElementType;


for elt in eltset do
  { ... do something with elt }


In the Perl programming language, 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) {
    print $_;

Array examples:

foreach (@arr) {
    print $_;
foreach $x (@arr) { #$x is the element in @arr
    print $x;

Hash example:

foreach $x (keys %hash) {
    print $x . " = " . $hash{$x}; # $x is a key in %hash and $hash{$x} is its value

Direct modification of collection members:

@arr = ( 'remove-foo', 'remove-bar' );
foreach $x (@arr){
    $x =~ s/remove-//;
# Now @arr = ('foo', 'bar');


foreach ($set as $value)
    // Do something to $value;

It is also possible to extract both keys and values using the alternate syntax:

foreach ($set as $key => $value) {
    echo "{$key} has a value of {$value}";

Direct modification of collection members:

$arr = array(1, 2, 3);
foreach ($arr as &$value) { // Note the &, $value is a reference to the original value inside $arr
// Now $arr = array(2, 3, 4);

// also works with the full syntax
foreach ($arr as $key => &$value) {
  • More information


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]


(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.


set.each do |item|
  # do something to item


for item in set
  # do something to item

You can also use this with a hash.

set.each do |item,value|
  # do something to item
  # do something to value


// return list of modified elements
items map { x => doSomething(x) }
items map multiplyByTwo

for {x <- items} yield doSomething(x)
for {x <- items} yield multiplyByTwo(x)

// return nothing, just perform action
items foreach { x => doSomething(x) }
items foreach println

for {x <- items} doSomething(x)
for {x <- items} println(x)


(for-each do-something-with a-list)

do-something-with is a one-argument function.


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


Swift uses the forin construct to iterate over members of a collection.[15]

for thing in someCollection {
    // do something with thing

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 {
    // 0..<10 constructs a half-open range, so the loop body
    // is repeated for i = 0, i = 1, …, i = 9.

for i in 0...10 {
    // 0...10 constructs a closed range, so the loop body
    // is repeated for i = 0, i = 1, …, i = 9, i = 10.


SystemVerilog has support for iteration over any vector or array type of any dimensionality using the foreach keyword.

A trivial example iterates over an array of integers:

code prints
int  array_1d[] = '{ 3, 2, 1, 0 };

foreach array_1d[index]
  $display("array_1d[%0d]: %0d", index, array_1d[index]);
array_1d[0]: 3
array_1d[1]: 2
array_1d[2]: 1
array_1d[3]: 0

A more complex example iterates over an associative array of arrays of integers:

code prints
int  array_2d[string][] = '{ "tens": '{ 10, 11 },
                             "twenties": '{ 20, 21 } };

foreach array_2d[key,index]
  $display("array_2d[%s,%0d]: %0d", key, index, array_2d[key,index]);
array_2d[tens,0]: 10
array_2d[tens,1]: 11
array_2d[twenties,0]: 20
array_2d[twenties,1]: 21


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.

code prints
foreach {i j} {1 2 3 4 5 6} {
    puts "$i $j"
1 2
3 4
5 6

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:

code prints
foreach i {1 2 3} j {a b c}  {
    puts "$i $j"
1 a
2 b
3 c

Visual Basic .NET

For Each item In enumerable
    ' Do something with item.

or without type inference

For Each item As type In enumerable
    ' Do something with item.

Windows PowerShell

foreach ($item in $set) {
    # Do something to $item

From a pipeline

$list | ForEach-Object {Write-Host $_}



See also


  1. ^ C++ For_Each Loop
  2. ^ Statement Documentation"foreach"D Programming Language . Digital Mars. Retrieved 2008-08-04. 
  3. ^ "C++11 Features in Visual C++ 11 - Visual C++ Team Blog - Site Home - MSDN Blogs". 2011-09-12. Retrieved 2013-08-04. 
  4. ^ "Qt 4.2: Generic Containers". Retrieved 2013-08-04. 
  5. ^ Eric Niebler (2013-01-31). "Chapter 9. Boost.Foreach - 1.53.0". Retrieved 2013-08-04. 
  6. ^ "Range Clause". The Go Programming Language Specification. The Go Programming Language. Retrieved October 20, 2013. 
  7. ^ a b "Enhanced for Loop - This new language construct[...]" "Java Programming Language, Section: Enhancements in JDK 5".  
  8. ^ "The For-Each Loop" "The For-Each Loop".  
  9. ^ "Implementing this interface allows an object to be the target of the "foreach" statement." "Iterable (Java Platform SE 6)".  
  10. ^ "Object.keys". Mozilla Developer Network. Retrieved May 7, 2014. 
  11. ^ "Array.prototype.forEach". Mozilla Developer Network. Retrieved October 20, 2013. 
  12. ^ "JavaScript - for statement". Mozilla Developer Network. Retrieved 2008-10-03. 
  13. ^ "JavaScript - statement on arrays". Mozilla Developer Network. Retrieved 2008-10-03. 
  14. ^ Chu, Oliver. "Mint Tutorial". Retrieved 20 October 2013. 
  15. ^
  16. ^ "XSLT Element". 
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.

Copyright © World Library Foundation. All rights reserved. eBooks from Hawaii eBook Library are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.