Foreach (or For each) loops are used for iterating over the items in a collection.
Introduction
For loops provide an easy way to traverse arrays. as part of the loop a variable is created that is incremented after each loop is completed. This variable can be used as the index to an array as well. However if the loop is just making a modification to each item then this method is often a clumsy way of expressing the programmers intentions. The For Each loop simplifies this by exposing each item without needing to know it's position in the list.
The collection objects must support the appropriate interface (as defined by the language).
C++
std::list<int> intList; intList.push_back(1); intList.push_back(7); intList.push_back(3); // Printing for(std::list<int>::const_interator i = intList.begin(); i != intList.end(); ++i) std::cout << *i << std::endl; // Editing for(std::list<int> i = intList.begin(); i != intList.end(); ++i) (*i) *= 2; // foreach_const and foreach macros #define foreach(T, c, i) for(T::iterator i = c.begin(); i!=c.end(); ++i) #define foreach_const(T, c, i) for(T::const_iterator i = c.begin(); i!=c.end(); ++i) // Usage of macros foreach_const(std::list<int>, intList, i) std::cout << *i << std::endl; foreach(std::list<int>, intList, i) (*i) *= 2;
Limitation of macros: The type of the container cannot contain comma (,
). Workaround like this:
#typedef std::map<int,string> IntStringMap; // .... foreach_const(IntStringMap, intToString, i) std::cout << i->first << "=" << i->second << std::endl;
See also std::for_each
[1] for a limited functionality.
Groovy
In groovy the each method can be used as a for each loop.
[1,2,3,4].each{ println it }
Also the for loop can be used on collections
def list = [1,2,3,4] for(item in list){ println item }
Perl
@arr = (1, 2, 3, 4, 5); foreach my $item (@arr) { print $item; }
PHP
Simple foreach loop:
// create an array containing some numbers $arr = array(1, 2, 3, 4, 5); //print every number foreach ($arr as $number) { echo "$number<br/>"; }
Foreach for associative array:
// create an associative array $arr['name'] = "Katy"; $arr['surname'] = "Jones": $arr['age'] = 29; // print $arr's key (name, etc) and values ("Katy", etc) foreach ($arr as $key => $value) { echo "<strong>$key</strong>: $value<br/>"; }
Visual Basic
Any object that implements the IEnumerable
, ICollection
, or their generic counterparts, including arrays, can be traversed by a For Each loop.
Dim x As New List(Of String) x.Add("corn") x.Add("coconut") x.Add("lemons") For Each item As String In x Console.Write(item) Next
The type declaration can be omitted if Option Infer
is set. In IEnumerable
implementations, the traversal of the collection can be customized by customizing the corresponding IEnumerator
.
Javascript
var item; var x = new Array(); x[0] = "apples"; x[1] = "oranges"; x[2] = "books"; for (item in x) { document.write(x[item] + "<br />"); }
|