foreach loop
last modified January 9, 2023
The foreach tutorial shows how to loop over data in different computer languages, including C#, F#, C++, Java, Kotlin, Go, Python, Ruby, Perl, PHP, JavaScript, TypeScript, Dart, Bash, and AWK.
C# foreach
C# has the foreach
keyword and the ForEach
method to
loop over containers.
using System; using System.Collections.Generic; var chars = new char[] {'a', 'b', 'c', 'x', 'y', 'z'}; foreach (var c in chars) { Console.WriteLine(c); } Console.WriteLine("-----------------------"); var vals = new List<int> {1, 2, 3, 4, 5, 6}; foreach (var val in vals) { Console.WriteLine(val); } Console.WriteLine("-----------------------"); var domains = new Dictionary<string, string> { {"sk", "Slovakia"}, {"ru", "Russia"}, {"de", "Germany"}, {"no", "Norway"} }; foreach (var pair in domains) { Console.WriteLine($"{pair.Key} - {pair.Value}"); } Console.WriteLine("-----------------------"); foreach ((var Key, var Value) in domains) { Console.WriteLine($"{Key} - {Value}"); }
In the example, we loop over elements of an array, list, and dictionary with
foreach
statement.
$ dotnet run a b c x y z ----------------------- 1 2 3 4 5 6 ----------------------- sk - Slovakia ru - Russia de - Germany no - Norway ----------------------- sk - Slovakia ru - Russia de - Germany no - Norway
In the next example, we loop over elements with ForEach
method.
using System; using System.Linq; using System.Collections.Generic; int[] vals = {1, 2, 3, 4, 5}; Array.ForEach(vals, e => Console.WriteLine(e)); Console.WriteLine("-----------------------"); var words = new List<string> {"tea", "falcon", "book", "sky"}; words.ForEach(e => Console.WriteLine(e)); Console.WriteLine("-----------------------"); var domains = new Dictionary<string, string> { {"sk", "Slovakia"}, {"ru", "Russia"}, {"de", "Germany"}, {"no", "Norway"} }; domains.ToList().ForEach(pair => Console.WriteLine($"{pair.Key} - {pair.Value}"));
We loop over elements of an array, list, and dictionary with
ForEach
method.
$ dotnet run 1 2 3 4 5 ----------------------- tea falcon book sky ----------------------- sk - Slovakia ru - Russia de - Germany no - Norway
F# foreach
F# has for/in
, List.iter
, Map.iter
forms to loop over elements.
let vals = [| 1; 2; 3; 4; 5 |] for vl in vals do printfn "%d" vl printfn "------------------------" let nums = [ 1 .. 6 ] List.iter (fun i -> printfn "%d" i) nums printfn "------------------------" let data = seq { for i in 1 .. 10 -> (i, i * i) } for (x, squared) in data do printfn "%d squared is %d" x squared printfn "------------------------" let countries = Map.empty. Add("sk", "Slovakia"). Add("ru", "Russia"). Add("de", "Germany"). Add("no", "Norway") countries |> Map.iter (fun key value -> printf "Key = %A, Value = %A\n" key value)
We loop over elements of an array, list, sequence, and map.
$ dotnet run 1 2 3 4 5 ------------------------ 1 2 3 4 5 6 ------------------------ 1 squared is 1 2 squared is 4 3 squared is 9 4 squared is 16 5 squared is 25 6 squared is 36 7 squared is 49 8 squared is 64 9 squared is 81 10 squared is 100 ------------------------ Key = "de", Value = "Germany" Key = "no", Value = "Norway" Key = "ru", Value = "Russia" Key = "sk", Value = "Slovakia"
C++ foreach
C++ 11 introduced range-based for loop.
#include <iostream> #include <list> #include <map> #include <string> int main() { int vals[] {1, 2, 3, 4, 5}; for (auto val : vals) { std::cout << val << std::endl; } std::list<std::string> words = { "falcon", "sky", "cloud", "book" }; for (auto word: words) { std::cout << word << std::endl; } std::map<std::string, int> items { {"coins", 3}, {"pens", 2}, {"keys", 1}, {"sheets", 12} }; for (auto item: items) { std::cout << item.first << ": " << item.second << std::endl; } }
We loop over an array, list, and map in C++.
$ ./foreach 1 2 3 4 5 falcon sky cloud book coins: 3 keys: 1 pens: 2 sheets: 12
Java foreach
In Java, we can use the enhanced-for loop and the forEach
method
to loop over elements of containers.
package com.zetcode; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JavaForeachEx { public static void main(String[] args) { int[] nums = { 3, 4, 2, 1, 6, 7 }; for (int e : nums) { System.out.println(e); } System.out.println("-------------------------"); List<String> items = new ArrayList<>(); items.add("coins"); items.add("pens"); items.add("keys"); items.add("sheets"); items.forEach(System.out::println); for (var item : items) { System.out.println(item); } System.out.println("-------------------------"); Map<String, Integer> items2 = new HashMap<>(); items2.put("coins", 3); items2.put("pens", 2); items2.put("keys", 1); items2.put("sheets", 12); items2.forEach((k, v) -> System.out.printf("%s : %d%n", k, v)); for (Map.Entry<String, Integer> entry : items2.entrySet()) { String k = entry.getKey(); Integer v = entry.getValue(); System.out.printf("%s : %d%n", k, v); } } }
We loop over elements of an array, arraylist and hashmap.
3 4 2 1 6 7 ------------------------- coins pens keys sheets coins pens keys sheets ------------------------- sheets : 12 coins : 3 keys : 1 pens : 2 sheets : 12 coins : 3 keys : 1 pens : 2
Kotlin foreach
Kotlin has foreEach
and forEachIndexed
methods
and for/in
form to loop over elements of containers.
package com.zetcode fun main() { val nums = arrayOf(1, 2, 3, 4, 5, 6, 7) nums.forEach { e -> print("$e ") } println() nums.forEachIndexed { i, e -> println("nums[$i] = $e") } for (e in nums) { print("$e ") } println("\n------------------------") val words = listOf("pen", "cup", "dog", "person", "cement", "coal", "spectacles") words.forEach { e -> print("$e ") } println() for (word in words) { print("$word ") } println() words.forEachIndexed { i, e -> println("words[$i] = $e") } println("------------------------") val items = mapOf("coins" to 12, "books" to 45, "cups" to 33, "pens" to 2) items.forEach { (k, v) -> println("There are $v $k") } for ((k, v) in items) { println("$k = $v") } }
We loop over elements of an array, list, and map in Kotlin.
1 2 3 4 5 6 7 nums[0] = 1 nums[1] = 2 nums[2] = 3 nums[3] = 4 nums[4] = 5 nums[5] = 6 nums[6] = 7 1 2 3 4 5 6 7 ------------------------ pen cup dog person cement coal spectacles pen cup dog person cement coal spectacles words[0] = pen words[1] = cup words[2] = dog words[3] = person words[4] = cement words[5] = coal words[6] = spectacles ------------------------ There are 12 coins There are 45 books There are 33 cups There are 2 pens coins = 12 books = 45 cups = 33 pens = 2
Go foreach
Go has for/range
form to loop over container elements.
package main import "fmt" func main() { vals := [...]int{5, 4, 3, 2, 1} for idx, e := range vals { fmt.Printf("%d has index %d\n", e, idx) } fmt.Println("-----------------------") data := map[string]string{ "de": "Germany", "it": "Italy", "sk": "Slovakia", } for k, v := range data { fmt.Println(k, "=>", v) } fmt.Println("----------------------") for k := range data { fmt.Println(k, "=>", data[k]) } }
We use for/range
form to loop over elements of an array and map.
$ go run foreach.go 5 has index 0 4 has index 1 3 has index 2 2 has index 3 1 has index 4 ----------------------- de => Germany it => Italy sk => Slovakia ---------------------- de => Germany it => Italy sk => Slovakia
Python foreach
Python has for/in
form to iterate over elements of containers.
#!/usr/bin/python vals = [1, 2, 3, 4, 5] for val in vals: print(val) data = { "coin": 2, "pen": 4, "cup": 12, "lamp": 3 } for k, v in data.items(): print(f"{k}: {v}")
We loop over a list and a map in Python.
$ ./foreach.py 1 2 3 4 5 coin: 2 pen: 4 cup: 12 lamp: 3
Ruby foreach
Ruby has each
and for/in
to iterate over arrays
and each
and each_pair
to iterate over hashes.
#!/usr/bin/ruby nums = [1, 2, 3, 4, 5] nums.each do |num| puts num end puts("--------------------") for e in nums do puts e end puts("--------------------") stones = { 1 => "garnet", 2 => "topaz", 3 => "opal", 4 => "amethyst" } stones.each { |k, v| puts "Key: #{k}, Value: #{v}" } puts("--------------------") stones.each_pair { |k, v| puts "Key: #{k}, Value: #{v}" }
In the example, we loop over an array and a hash.
$ ./foreach.rb 1 2 3 4 5 -------------------- 1 2 3 4 5 -------------------- Key: 1, Value: garnet Key: 2, Value: topaz Key: 3, Value: opal Key: 4, Value: amethyst -------------------- Key: 1, Value: garnet Key: 2, Value: topaz Key: 3, Value: opal Key: 4, Value: amethyst
Perl foreach
Perl has foreach
statement to loop over elements of containers.
#!/usr/bin/perl use v5.30; my @vals = (1..6); foreach my $val (@vals) { say "$val "; } say "---------------------------"; say "$_" foreach @vals; say "---------------------------"; my %stones = ( 1 => "garnet", 2 => "topaz", 3 => "opal", 4 => "amethyst" ); foreach my $k (keys %stones) { say "$k => $stones{$k}"; }
We loop over an array and has in Perl with foreach
.
$ ./foreach.pl 1 2 3 4 5 6 --------------------------- 1 2 3 4 5 6 --------------------------- 1 => garnet 2 => topaz 3 => opal 4 => amethyst
PHP foreach
PHP has foreach
keyword to loop over elements of containers.
<?php $planets = [ "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune" ]; foreach ($planets as $item) { echo "$item "; } echo "\n"; $benelux = [ 'be' => 'Belgium', 'lu' => 'Luxembourgh', 'nl' => 'Netherlands' ]; foreach ($benelux as $key => $value) { echo "$key is $value\n"; }
We loop over a PHP array with foreach
.
$ php foreach.php Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune be is Belgium lu is Luxembourgh nl is Netherlands
JavaScript foreach
JavaScript has forEach
method and for/in
and
for/of
forms to loop over containers.
let words = ['pen', 'pencil', 'falcon', 'rock', 'sky', 'earth']; words.forEach(e => console.log(e)); console.log("----------------------"); words.forEach((word, idx) => { console.log(`${word} has index ${idx}`); }); console.log("----------------------"); for (let idx in words) { console.log(`${words[idx]} has index ${idx}`); } console.log("----------------------"); for (let word of words) { console.log(word); } console.log("----------------------"); let stones = new Map([[1, "garnet"], [2, "topaz"], [3, "opal"], [4, "amethyst"]]); stones.forEach((k, v) => { console.log(`${k}: ${v}`); });
The example loops over elements of an array and a map.
$ node foreach.js pen pencil falcon rock sky earth ---------------------- pen has index 0 pencil has index 1 falcon has index 2 rock has index 3 sky has index 4 earth has index 5 ---------------------- pen has index 0 pencil has index 1 falcon has index 2 rock has index 3 sky has index 4 earth has index 5 ---------------------- pen pencil falcon rock sky earth ---------------------- garnet: 1 topaz: 2 opal: 3 amethyst: 4
TypeScript foreach
TypeScript has forEach
method and for/in
and
for/of
forms to loop over containers.
let words: string[] = ['pen', 'pencil', 'falcon', 'rock', 'sky', 'earth']; words.forEach(e => console.log(e)); console.log("----------------------"); words.forEach((word, idx) => { console.log(`${word} has index ${idx}`); }); console.log("----------------------"); for (let idx in words) { console.log(`${words[idx]} has index ${idx}`); } console.log("----------------------"); for (let word of words) { console.log(word); } console.log("----------------------"); let stones = new Map<number, string>([[1, "garnet"], [2, "topaz"], [3, "opal"], [4, "amethyst"]]); stones.forEach((k, v) => { console.log(`${k}: ${v}`); });
The example loops over elements of a typed array and map.
$ tsc foreach.ts --target esnext && node foreach.js pen pencil falcon rock sky earth ---------------------- pen has index 0 pencil has index 1 falcon has index 2 rock has index 3 sky has index 4 earth has index 5 ---------------------- pen has index 0 pencil has index 1 falcon has index 2 rock has index 3 sky has index 4 earth has index 5 ---------------------- pen pencil falcon rock sky earth ---------------------- garnet: 1 topaz: 2 opal: 3 amethyst: 4
Dart foreach
In Dart, we have the forEach
method to loop over containers.
import 'dart:io'; void main() { var vals = <int>[1, 2, 3, 4, 5]; vals.forEach((e) { stdout.write("$e "); }); print(""); var fruit = {1: 'Apple', 2: 'Banana', 3: 'Cherry', 4: 'Orange'}; fruit.forEach((key, val) { print('{ key: $key, value: $val}'); }); print('---------------------------'); fruit.entries.forEach((e) { print('{ key: ${e.key}, value: ${e.value} }'); }); print('---------------------------'); for (var key in fruit.keys) print(key); for (var value in fruit.values) print(value); }
We loop over a list and map in Dart with forEach
.
$ dart foreach.dart 1 2 3 4 5 { key: 1, value: Apple} { key: 2, value: Banana} { key: 3, value: Cherry} { key: 4, value: Orange} --------------------------- { key: 1, value: Apple } { key: 2, value: Banana } { key: 3, value: Cherry } { key: 4, value: Orange } --------------------------- 1 2 3 4 Apple Banana Cherry Orange
Bash foreach
In Bash, we have the for/in
form to loop over containers.
#!/usr/bin/bash words=(falcon sky cloud water lord lawn) for word in "${words[@]}" do echo "$word" done echo "--------------------------" stones=([1]=garnet [2]=topaz [3]=opan [4]=amethyst) for k in "${!stones[@]}" do echo "$k: ${stones[$k]}" done
We loop over a plain array and an associative array in Bash with
for/in
.
$ ./foreach.sh falcon sky cloud water lord lawn -------------------------- 4: amethyst 3: opan 2: topaz 1: garnet
AWK foreach
In AWK, we have the for/in
form to loop over containers.
sky smile nine nice cup cloud tower
This is the words.txt
file.
#!/usr/bin/awk -f BEGIN { i = 0 } { words[i] = $0 i++ } END { for (i in words) { print words[i] } }
We loop over an array of words in AWK with for/in
.
$ ./foreach.awk words.txt sky smile nine nice cup cloud tower
In this article, we have used foreach loop to go over elements of containers in different computer languages.