
コンピュータプログラミングにおいて、foreach ループ(またはfor-each ループ) は、コレクション内の項目を走査するための制御フロー文です。foreachは通常、標準のforループ文の代わりに使用されます。ただし、他のforループ構造とは異なり、 foreachループ[1]は通常、明示的なカウンターを保持しません。つまり、基本的に「このセット内のすべての項目に対してこれを実行する」と言っているのであって、「これをx回実行する」とは言っていません。これにより、潜在的なoff-by-one エラーが回避され、コードが読みやすくなります。オブジェクト指向言語では、反復子が暗黙的であっても、走査の手段としてよく使用されます。
一部の言語のforeachステートメントには、コレクション内の各項目を最初から最後まで処理するという、定義された順序があります。他の多くの言語、特に配列プログラミング言語のforeachステートメントには、特定の順序はありません。これにより、一般にループの最適化が簡素化され、特にコレクション内の項目の ベクトル処理を同時に実行できるようになります。
構文
構文は言語によって異なります。ほとんどの言語では単純な単語 を使用しますforが、より論理的な単語 を使用する言語もありますforeach。おおよそ次のようになります。
コレクション内の foreach(キー, 値) {
# 価値あるものを作ろう #
}
言語サポート
foreach ループをサポートするプログラミング言語には、 ABC、ActionScript、Ada、C++ ( C++11以降)、C#、ColdFusion Markup Language (CFML)、Cobra、D、Daplex (クエリ言語)、Delphi、ECMAScript、Erlang、Java (1.5 以降)、JavaScript、Lua、Objective-C (2.0 以降)、ParaSail、Perl、PHP、Prolog、[2] Python、R、REALbasic、Rebol、[3] Red、[4] Ruby、Scala、Smalltalk、Swift、Tcl、tcsh、Unix シェル、Visual Basic (.NET)、Windows PowerShellなどがあります。 foreach のない言語としては、 C、 C++ 11 より前の C++ などがあります。
アクションスクリプト3.0
ActionScriptは、各インデックスの値を取得する
ECMAScript 4.0標準[5]をfor each .. in[6]でサポートしています。
var foo : Object = { "apple" : 1 , "orange" : 2 };
for each ( var value : int in foo ) { trace ( value ); }
// 「1」を返し、次に「2」を返す
また、各インデックスでキーを取得する
for .. in[7]もサポートしています。
for ( var key : String in foo ) { trace ( key ); }
// 「apple」を返し、次に「orange」を返します
エイダ
Ada は、通常のfor ループの一部として foreach ループをサポートしています。X が配列であるとします。
for I in X ' Range loop
X ( I ) := Get_Next_Element ;
ループ終了 ;
この構文は主に配列で使用されますが、完全な反復が必要な場合は他の型でも機能します。
Ada 2012 では、あらゆる種類のコンテナー (配列、リスト、マップなど) に対する foreach ループにループが一般化されました。
for Obj of X ループ
-- Obj で作業します
ループを終了します ;
C
C言語にはコレクションや foreach 構造はありません。ただし、コレクションとして使用できる標準データ構造がいくつかあり、マクロを使用して foreach を簡単に作成できます。
しかし、2 つの明らかな問題が発生します。
- このマクロは不衛生です。ループ後に残る既存のスコープ内で新しい変数を宣言します。
- 異なるコレクション型 (配列やリンク リストなど) で機能する、またはユーザー型に拡張可能な 1 つの foreach マクロを定義することはできません。
charの集合としてのC文字列
#include <stdio.h>
/* 文字列を char 値のコレクションとして表示する foreach マクロ */
#define foreach(ptrvar, strvar) \
char*ポインタ変数; \
(ptrvar = strvar; (*ptrvar) != '\0'; *ptrvar++) の場合
int main ( int argc 、char ** argv ) {
char * s1 = "abcdefg" ;
char * s2 = "123456789" ;
それぞれのp1 、s1に対して
printf ( "ループ1: %c \n " , * p1 );
}
foreach ( p2 、s2 ) {
printf ( "ループ2: %c \n " , * p2 );
}
0 を返します。
}
C int 配列は int のコレクションとして扱われます (配列のサイズはコンパイル時に判明します)
#include <stdio.h>
/* int 値の配列を int 値のコレクションとして表示する foreach マクロ */
#define foreach(intpvar, intarr) \
int* intpvar; \
for (intpvar = intarr; intpvar < (intarr + (sizeof(intarr)/sizeof(intarr[0]))); ++intpvar)
int main ( int argc 、char ** argv ) {
int a1 [] = { 1 , 1 , 2 , 3 , 5 , 8 };
int a2 [] = { 3 , 1 , 4 , 1 , 5 , 9 };
foreach ( p1 、a1 ) {
printf ( "ループ1: %d \n " , * p1 );
}
p2 、a2の各要素を順に処理します。
printf ( "ループ2: %d \n " , * p2 );
}
0 を返します。
}
最も一般的なもの: コレクションとしての文字列または配列 (コレクションのサイズは実行時に判明)
#include <stdio.h>
#include <文字列.h>
/* 指定された型の配列を指定された型の値のコレクションとして表示する foreach マクロ */
#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 ) {
char * c1 = "コレクション" ;
int c2 [] = { 3 、1 、4 、1 、5 、9 };
ダブル* c3 ;
c3len = 4 ;
c3 = ( double * ) calloc ( c3len 、sizeof ( double ) );
c3 [ 0 ] = 1.2 ; c3 [ 1 ] = 3.4 ; c3 [ 2 ] = 5.6 ; c3 [ 3 ] = 7.8 ;
foreach ( char , p1 , c1 , strlen ( c1 )) {
printf ( "ループ1: %c \n " , * p1 );
}
foreach ( int 、p2 、c2 、arraylen ( c2 )) {
printf ( "ループ2: %d \n " , * p2 );
}
foreach ( double 、p3 、c3 、c3len ) {
printf ( "ループ3: %.1lf \n " , * p3 );
}
0 を返します。
}
C#
C#では、myArray が整数の配列であると仮定します。
foreach ( int x in myArray ) { Console.WriteLine ( x ) ; }
統合言語クエリ(LINQ) は、デリゲートまたはラムダ式を受け入れる次の構文を提供します。
myArray.ToList ( ) . ForEach ( x => Console.WriteLine ( x ) ) ;
C++
C++11 ではforeach ループが提供されています。構文は Java の構文に似ています。
#include <iostream>
int main () { int myint [] = { 1 , 2 , 3 , 4 , 5 };
for ( int i : myint ) { std :: cout << i << '\n' ; } }
C++11の範囲ベースのfor文は、 GNUコンパイラコレクション(GCC)(バージョン4.6以降)、Clang(バージョン3.0以降)、およびVisual C++ 2012(バージョン11 [8]) に実装されています。
範囲ベースの構文糖衣は次のforものと同等です:
for ( auto __anon = begin ( myint ); __anon != end ( myint ); ++ __anon ) { auto i = * __anon ; std :: cout << i << '\n' ; }
コンパイラは引数依存の検索をbegin使用して関数と関数を解決しますend。[9]
C ++標準ライブラリはfor_each、各要素を関数に適用する[10]もサポートしています。関数は、定義済み関数またはラムダ式にすることができます。範囲ベースのforは開始から終了までのみですが、最初の2つのパラメータを変更することで範囲または方向を変更できます。
#include <iostream> #include <algorithm> // std::for_each を含む#include <vector>
int main () { std :: vector < int > v { 1 , 2 , 3 , 4 , 5 };
std :: for_each ( v.begin ( ) , v.end ( ) , []( int i ) { std :: cout << i << ' \ n' ; }) ;
std :: cout << "逆転しましたが、2 つの要素をスキップします: \n " ;
std :: for_each ( v.rbegin ( ) + 2 , v.rend ( ) , []( int i ) { std :: cout << i << ' \ n' ; }); }
C++フレームワークであるQtは、STLイテレータインターフェースを使用して foreachループ[11]を提供するマクロを提供しています。
#include <QList> #include <QDebug>
int main () { QList < int >リスト;
リスト<< 1 << 2 << 3 << 4 << 5 ;
foreach ( int i 、list ) { qDebug () << i ; } }
Boostは、査読済みのポータブルC++ライブラリのセットで、foreachループも提供しています。[12]
#include <boost/foreach.hpp> #include <iostream> int main () { int myint [] = { 1 , 2 , 3 , 4 , 5 }; BOOST_FOREACH ( int & i , myint ) { std :: cout << i << '\n' ; } }
C++/CLI
C ++/CLI言語は、C# に似た構造を提案します。
myArray が整数の配列であると仮定します。
for each ( int x in myArray ) { Console :: WriteLine ( x ); }
ColdFusion マークアップ言語 (CFML)
スクリプト構文
// 配列
arrayeach ([ 1 , 2 , 3 , 4 , 5 ], function ( v ){
writeOutput ( v );
});
// または
( v が[ 1 , 2 , 3 , 4 , 5 ]の場合){ writeOutput ( v ); }
// または
// (Railo のみ、ColdFusion ではサポートされていません)
letters = [ "a" , "b" , "c" , "d" , "e" ];
letters.each ( function ( v ){
writeOutput ( v ); // abcde
});
// 構造体
for ( k in collection ){
writeOutput ( collection [ k ]);
}
// または
structEach (コレクション、 関数( k 、v ){
writeOutput ( "キー: #k# 、値: #v# ;" );
});
// または
// (Railo のみ、ColdFusion ではサポートされていません)
collection.each ( function ( k , v ){
writeOutput ( "key: #k# , value: #v# ;" );
});
タグ構文
<!--- 配列 --->
<cfloop index = "v" 配列= " #['a','b','c','d','e']# " >
<cfoutput> # v # </cfoutput> <!--- abcde --->
</cfloop>
CFML はこの構造内の値を誤って「インデックス」として識別します。index変数は配列要素のインデックスではなく、実際の値を受け取ります。
<!--- 構造体 --->
<cfloop item = "k" collection = " #collection# " >
<cfoutput> #コレクション[ k ]# </cfoutput>
</cfloop>
コモンリスプ
Common Lisp は、 dolistマクロのいずれかを使用して foreach 機能を提供します。
( dolist ( i ' ( 1 3 5 6 8 10 14 17 )) ( i を印刷))
または、より多くのデータ型を反復処理するための 強力なループマクロ
( loop for i in ' ( 1 3 5 6 8 10 14 17 ) do ( print i ))
mapcar関数でも:
( mapcar #'印刷' ( 1 3 5 6 8 10 14 17 ))
だ
foreach ( item ; set ) { // item に対して何かを行う}
または
foreach (引数) { // 値を渡す}
ダーツ
for ( final element in someCollection ) { // 要素に対して何かを行う}
オブジェクトパスカル、デルファイ
Foreach サポートはDelphi 2005 で追加され、varセクションで宣言する必要がある列挙子変数を使用します。
for enumerator in collection do begin //ここで何かするend ;
エッフェル
Eiffelループ構造の反復 (foreach) 形式は、キーワードによって導入されますacross。
この例では、構造体のすべての要素my_listが印刷されます。
my_list全体にわたってic loop print ( ic . item ) end
ローカル エンティティはic、ライブラリ クラス のインスタンスですITERATION_CURSOR。カーソルの機能により、item各構造要素にアクセスできます。クラスの子孫ITERATION_CURSORを作成して、特殊な反復アルゴリズムを処理できます。反復処理できるオブジェクトのタイプ (my_listこの例では) は、ライブラリ クラス から継承するクラスに基づいていますITERABLE。
エッフェル ループの反復形式は、キーワードを(普遍量化を実行する) または(存在量化をloop実行する)に置き換えると、ブール式として使用することもできます。
allsome
my_listこの反復は、内のすべての項目の数が 3 より大きい
場合に true となるブール式です。
my_list全体でicすべてic . item . count > 3終了
少なくとも 1 つの項目の数が 3 より大きい場合は、次のようになります。
my_list全体にわたってicの一部ic . item . count > 3終了
行く
Goの foreach ループは、配列、スライス、文字列、マップ、またはチャネルをループするために使用できます。
2 つの値形式を使用すると、インデックス/キー (最初の要素) と値 (2 番目の要素) が取得されます。
for index , value := range someCollection { // インデックスと値に対して何かを行う}
1 つの値形式を使用すると、インデックス/キー (最初の要素) が取得されます。
for index := range someCollection { // インデックスに対して何かを行う}
[13]
グルーヴィー
Groovy は、配列、リスト、範囲などのコレクションに対する forループをサポートしています。
def x = [ 1 , 2 , 3 , 4 ] for ( v in x ) // 4要素配列xをループする{ println v }
for ( v in [ 1 , 2 , 3 , 4 ]) // 4要素のリテラルリストをループする{ println v }
for ( v in 1 .. 4 ) // 1..4の範囲をループする{ println v }
Groovy は配列インデックスを使用した C スタイルの for ループもサポートしています。
( i = 0 ; i < x . size (); i ++)の場合{ println x [ i ] }
Groovyのコレクションは、 eachキーワードとクロージャを使用して反復処理することもできます。デフォルトでは、ループダミーの名前は
x . each { println it } // x 配列のすべての要素を出力しますx . each { i -> println i } // 上記の行と同等ですが、ループダミーのみが明示的に "i" と名付けられています
ハスケル
Haskellでは、Control.Monad のand (引数を反転したもの) を
使用して、モナドアクションでリストをループすることができます。mapM_forM_mapM_
また、これらの関数を一般化して、モナドではなくアプリカティブ ファンクタや、 Data.Traversable のtraverse(for引数を反転した ) とmapM(forM引数を反転した ) を使用してトラバース可能な任意のデータ構造で動作するようにすることもできます。
ハクセ
for (反復可能オブジェクト内の値) { trace (値); }
ラムダ。iter (イテラブル,関数(値)トレース(値));
ジャワ
Javaでは、foreach構文はJava Development Kit (JDK) 1.5.0で導入されました。[14]
公式の情報源では、この構造にいくつかの名前が付けられています。「拡張forループ」[14] 、 「For-Eachループ」[15]、「foreachステートメント」[16] [17]などと呼ばれています。 : 264
for ( Type item : iterableCollection ) { // item に対して何かを行う}
JavaはJava 8以降ストリームAPIも提供しています: [17] : 294–203
List < Integer > intList = List.of ( 1,2,3,4 ) ; intList.stream ( ) . forEach ( i- > System.out.println ( i ) ) ;
JavaScript
ECMAScript 6標準には、for..ofジェネレータ、配列などに対するインデックスなしの反復処理が含まれています。
for ( var item of array ){ // 何かを行う}
あるいは、機能ベースのスタイル:[18]
array . forEach ( item => { // 何かを行う})
オブジェクト内のキーを順序なしで反復処理する場合、JavaScript にはループ機能がありますfor...in。
for ( var key in object ) { // object[key] を使って操作する}
プロトタイプ チェーンを通じて継承されたプロパティを除いたオブジェクト自体のプロパティに反復処理を制限するには、JavaScript エンジンでサポートされている場合 (WebKit/Safari の場合、これは「バージョン 3 以降」を意味します)、hasOwnProperty() テストを追加すると便利な場合があります。
for ( var key in object ) { if ( object . hasOwnProperty ( key )) { // object[key] を使って操作する} }
ECMAScript 5では、オブジェクトのキーを配列に転送するためのObject.keysメソッドが提供されました。[19]
var book = { name : "クリスマス・キャロル" , author : "チャールズ・ディケンズ" }; for ( var key of Object . keys ( book )){ alert ( "PropertyName = " key + " Property Value = " + book [ key ]); }
ルア
出典: [20]
数値インデックス値のみを反復処理します。
for index , value in ipairs ( array ) do
-- 何らかの処理を実行する
end
すべてのインデックス値を反復処理します。
インデックス 、値のペア(配列)do -- 何かを実行するend
マセマティカ
Mathematicaでは、Doリストの各要素に対して式を評価するだけで、値を返しません。
In [] := Do [ doSomethingWithItem , { item , list }]
より一般的なのは を使用することですTable。これは、各評価の結果を新しいリストで返します。
In [] :=リスト= { 3 , 4 , 5 };
In [] :=テーブル[項目^ 2 , {項目,リスト}] Out [] = { 9 , 16 , 25 }
マテリアライズド
for item = array %do something end
ミント
Mint では、次の構文を持つ For each ループがサポートされています。
リストの各要素に対して/* '何かを実行します。' */終了
for (;;)Mintのまたはwhile (true) 無限ループは、for eachループと無限に長いリストを
使用して記述できます。[21]
import type /* 'この関数は、' * '無限に長いリストの各インデックス番号 iにマップされます。' */ sub identity ( x ) return x end /* '次のコードは、' * '[0, 1, 2, 3, 4, 5, ..., infinity]' というリストを作成します。' */ infiniteList = list ( identity ) for each element of infiniteList /* '何かを永遠に実行します。' */ end
オブジェクティブC
Fast enumerationと呼ばれる Foreach ループは、 Objective-C 2.0以降でサポートされています。NSArray、NSDictionary (キーを反復処理)、NSSet など、NSFastEnumeration プロトコルを実装する任意のオブジェクトを反復処理するために使用できます。
NSArray * a = [ NSArray new ]; // 任意のコンテナクラスに置き換えることができます
for ( id obj in a ) { // 動的型付けが使用されます。 'a' に格納されるオブジェクトの型は不明である可能性があります。 配列には、さまざまな型のオブジェクトを保持できます。
printf ( "%s \n " , [[ obj description ] UTF8String ]); // %s では UTF8String を使用する必要がありますNSLog ( @"%@" , obj ); // オブジェクトのままにします}
NSArray はメンバーにメッセージをブロードキャストすることもできます。
NSArray * a = [ NSArray new ];
[ makeObjectsPerformSelector : @selector ( printDescription )] ;
ブロックが利用可能な場合、NSArray は含まれるすべての項目に対して自動的にブロックを実行できます。
[ myArray enumerateObjectsUsingBlock :^ ( id obj 、NSUInteger idx 、BOOL * stop ) { NSLog ( @"obj %@" 、obj ); if ([ obj shouldStopIterationNow ]) * stop = YES ; }];
反復されるコレクションのタイプによって、各反復で返される項目が決まります。例:
NSDictionary * d = [ NSDictionary new ];
for ( id key in d ) { NSObject * obj = [ d objectForKey : key ]; // (一意の) キーを使用して (一意でない可能性のある) オブジェクトにアクセスします。NSLog ( @"%@" , obj ); }
オカムル
OCaml は関数型プログラミング言語です。したがって、 foreach ループと同等のことは、リストと配列に対するライブラリ関数として実現できます。
リストの場合:
リスト.iter ( fun x -> print_int x ) [ 1 ; 2 ; 3 ; 4 ] ;;
または簡単に言うと:
リスト.iter print_int [ 1 ; 2 ; 3 ; 4 ] ;;
配列の場合:
配列.iter ( fun x -> print_int x) [ | 1 ; 2 ; 3 ; 4 | ] ;;
または簡単に言うと:
配列.iter print_int [| 1 ; 2 ; 3 ; 4 |] ;;
パラセール
ParaSail並列プログラミング言語は、コンテナー上の一般的な「for each」反復子を含む、いくつかの種類の反復子をサポートしています。
var Con : Container < Element_Type > := .. .
// ...
Conの各Elemに対して 並行ループを実行します // ループは「順方向」または「逆方向」にすることも、順序なし (デフォルト) にすることもできます// ... Elem に対して何らかの処理を実行しますループを終了します
ParaSail は、反復子のフィルターと、マップのキーと値の両方を参照する機能もサポートしています。以下は、キーが "My_Set" にある要素のみを選択する "My_Map" の要素に対する順方向反復処理です。
var My_Map : Map < Key_Type => Univ_String 、 Value_Type => Tree < Integer >> := .. .
const My_Set : Set < Univ_String > := [ "abc" 、 "def" 、 "ghi" ];
for each [ Str => Tr ] of My_Map { Str in My_Set } forward loop
// ... Str または Tr で何かを行う
end loop
パスカル
Pascalでは、 ISO 標準 10206:1990 によってセット型の反復処理が導入されました。
var
elt :要素タイプ; eltset : ElementTypeのセット;
{...}
for elt in eltset do { ... elt で何かを行う }
パール
Perlでは、foreach (短縮形の for に相当) を使用してリストの要素を走査できます。ループするコレクションを示す式はリスト コンテキストで評価され、結果のリストの各項目はループ変数にエイリアスされます。
リストリテラルの例:
foreach ( 1 , 2 , 3 , 4 ) { $_を印刷します; }
配列の例:
foreach ( @arr ) { $_を印刷します; }
foreach $x ( @arr ) { #$x は @arr の要素です。 print $x ; }
ハッシュの例:
foreach $x ( keys %hash ) { print $x . " = " . $hash { $x }; # $x は %hash のキーであり、$hash{$x} はその値です}
コレクション メンバーの直接変更:
@arr = ( 'remove-foo' , 'remove-bar' ); foreach $x ( @arr ){ $x =~ s/remove-// ; } # ここで @arr = ('foo', 'bar');
PHP の
foreach ( $set as $value ) {
// $value に対して何かを実行します。
}
代替構文を使用してキーと値の両方を抽出することも可能です。
foreach ( $set as $key => $value ) {
echo " { $key }の値は{ $value }です" ;
}
コレクション メンバーの直接変更:
$arr = array ( 1 , 2 , 3 );
foreach ( $arr as & $value ) { // &、$value は $arr 内の元の値への参照です
$value ++ ;
}
// これで $arr = array(2, 3, 4);
// 完全な構文でも動作します
foreach ( $arr as $key => & $value ) {
$value ++ ;
}
- 詳細情報
パイソン
for item in iterable_collection :
# item に対して何かを行う
Python のタプル割り当ては foreach ループで完全に利用可能で、連想配列内の (キー、値) ペアの反復も簡単に行えます。
for key , value in some_dict . items (): # dict の直接反復処理はキーを反復処理します
# 処理を実行します
for ... inPython の唯一の for ループの種類
として、他の言語にある「カウンター」ループに相当するものは次のとおりです...
for i in range ( len ( seq )):
# seq[i] に対して何かを行う
...ただし、enumerate関数を使用する方がより「Python 的」であると考えられます。
for i , item in enumerate ( seq ):
# item に対して何らかの処理を実行する
# 場合によってはそれを seq[i] に代入する
R
for ( item in object ) { # アイテムに対して何かを行う}
for ... inR の唯一のループの種類であるためfor、他の言語にある「カウンター」ループに相当するものは次のとおりです...
for ( i in seq_along ( object )) { # object[[i]] を使って何かする}
ラケット
( for ([アイテムセット]) (アイテムで何かを行う))
または従来の Schemefor-each関数を使用します。
( for-eachでa リストを使って何かを行う)
do-something-with引数が 1 つの関数です。
楽
Perl の姉妹言語であるRakuでは、リストの要素をトラバースするにはfor を使用する必要があります ( foreachは使用できません)。ループするコレクションを示す式はリストコンテキストで評価されますが、デフォルトではフラット化されず、結果のリストの各項目は、ループ変数にエイリアスされます。
リストリテラルの例:
1 .. 4の場合{
。言う;
}
配列の例:
@arr {の場合
。言う;
}
ステートメント修飾子形式の for ループ:
. @arrの場合、次のようにします 。
@arr -> $xの場合{
$xと言います ;
}
for @arr -> $x , $y { # 一度に複数の項目がある場合は
"$x, $y"と表示します 。
}
ハッシュの例:
キー の場合%hash -> $key {
「$key: $hash{$key}」と記述します 。
}
または
%hash . kv -> $key、$value {
「$key: $value」と言います 。
}
または
for %hash -> $x {
say "$x.key(): $x.value()" ; # 二重引用符で囲まれた文字列にインラインするには括弧が必要です
}
二重尖端ブロック<->を使用したコレクション メンバーの直接変更:
my @arr = 1 , 2 , 3 ;
@arr <-> $x {
$x * = 2 ;
}
# ここで @arr = 2,4,6;
ルビー
set . each do | item | # item に対して何かを実行するend
または
for item in set # アイテムに対して何かを行うend
これはハッシュでも使用できます。
設定します。それぞれ実行します| key , value | # キーに対して何かを実行します# 値に対して何かを実行しますend
さび
ループforは構造 を持ちます。式に対して IntoIterator::into_iter メソッドを暗黙的に呼び出し、結果の値を使用します。結果の値は Iterator トレイトを実装する必要があります。式自体がイテレータである場合、ループは、イテレータを変更せずに返すすべての Iterators に対する IntoIterator の実装を介して、式を直接使用します。ループは、ループ本体を実行する前に、イテレータに対して メソッドを呼び出します。が を返す場合、内部の値がパターンに割り当てられ、ループ本体が実行されます。 が を返す場合、ループは終了します。
for <pattern> in <expression> { /* optional statements */ }forIterator::nextIterator::nextSome(_)None
mut numbers = vec! [ 1 , 2 , 3 ]とします。
// 不変参照:
for number in & numbers { // IntoIterator::into_iter(&numbers) を呼び出しますprintln! ( "{}" , number ); }
numbers.iter ( ) . map ( | x | x * x )のsquareの場合{ // numbers.iter().map(|x|x*x) は Iterator を実装しますprintln! ( "{}" , square ) ; }
// 可変参照:
for number in & mut numbers { // IntoIterator::into_iter(&mut numbers) * number *= 2を呼び出します; }
// "[2, 4, 6]" を出力します:
println! ( "{:?}" , numbers );
// Vec を消費して Iterator を作成します:
for number in numbers { // IntoIterator::into_iter(numbers) を呼び出します// ... }
// 「移動した値の借用」に関するエラー:
// println!("{:?}", numbers);
スカラ
// 変更された要素のリストを返す
items map { x => doSomething ( x ) } items map multiplyByTwo
{ x <- items }の場合、doSomething ( x )となり、 { x <- items }の場合、multiplyByTwo ( x )となります。
// 何も返さず、アクションを実行するだけです
items foreach { x => doSomething ( x ) } items foreach println
{ x <- items }の場合、doSomething ( x ) 、 { x <- items }の場合、println ( x )
// for 内包表記でのパターンマッチングの例
for (( key , value ) <- someMap ) println ( s" $ key -> $ value " )
スキーム
( for-eachでa リストを使って何かを行う)
do-something-with引数が 1 つの関数です。
雑談
コレクション do: [ : item | "item に何かを実行する" ]
迅速
Swiftはfor…構造を使用してinコレクションのメンバーを反復処理します。[22]
for thing in someCollection { // thing を使って何かする}
for…ループinは、ループ本体を特定の回数反復処理するために、クローズド範囲構造およびハーフオープン範囲構造とともに使用されることがよくあります。
for i in 0. . < 10 { // 0..<10 は半開範囲を構成するため、ループ本体はi = 0、i = 1、…、i = 9 に対して繰り返されます。}
for i in 0. . .10 { // 0...10 は閉じた範囲を構成するため、ループ本体はi = 0、i = 1、…、i = 9、i = 10 について繰り返されます。 }
システムVerilog
SystemVerilog は、キーワードを使用して、任意の次元のベクトルまたは配列型に対する反復処理をサポートしますforeach。
簡単な例では、整数の配列を反復します。
より複雑な例では、整数の配列の連想配列を反復します。
Tcl
Tcl はforeach を使用してリストを反復処理します。複数の反復変数を指定することもできます。その場合、リストの連続した値が割り当てられます。
複数のリストを同時に反復処理することも可能です。以下では、i最初のリストの連続した値とj2 番目のリストの連続した値を想定しています。
ビジュアルベーシック
For Each item In enumerable ' アイテムに対して何かを実行します。次へ
または型推論なし
For Each item As type In enumerable ' アイテムに対して何かを実行します。次へ
ウィンドウズ
従来のコマンドプロセッサ
仮想frobコマンドを 3 回呼び出し、そのたびに色名を指定します。
C:\> FOR %% a IN (赤 緑 青) DO frob %% a
Windows PowerShell
foreach ( $item in $set ) {
# $item に対して何かを行う
}
パイプラインから
$list | ForEach -Object {書き込みホスト $_ }
# またはエイリアス
$list | foreach { write $_ }
$list | % { write $_ }を使用する
翻訳
<xsl:for-each select= "set" > <!-- <set> 内の要素に対して何かを実行します --> </xsl:for-each>
[23]
参照
参考文献
- ^ 「Dプログラミング言語 foreach ステートメントのドキュメント」 Digital Mars 。 2008年8月4日閲覧。
- ^ 「SWI-Prolog – foreach/2」。Swi -prolog.org . 2020年2月10日閲覧。
- ^ 「レボル」.
- ^ 「Redプログラミング言語」。
- ^ 「提案されたECMAScript第4版 - 言語の概要」(PDF) 。 2020年2月21日閲覧。
- ^ 「for each..in」。2020年2月21日閲覧。
- ^ "for..in" . 2020年2月21日閲覧。
- ^ 「Visual C++ 11 の C++11 機能 - Visual C++ チーム ブログ - サイト ホーム - MSDN ブログ」。Blogs.msdn.com。2011 年 9 月 12 日。2013年 8 月 4 日閲覧。
- ^ 「範囲ベースの for ループ (C++11 以降)」。en.cppreference.com。2018年 12 月 3 日閲覧。
- ^ "std::for_each - cppreference". en.cppreference.com . 2017年9月30日閲覧。
- ^ 「Qt 4.2: Generic Containers」。Doc.qt.digia.com。2015年11月23日時点のオリジナルよりアーカイブ。2013年8月4日閲覧。
- ^ Eric Niebler (2013-01-31). 「第 9 章 Boost.Foreach - 1.53.0」. Boost.org . 2013 年 8 月 4 日閲覧。
- ^ 「Range Clause」。Goプログラミング言語仕様。Goプログラミング言語。 2013年10月20日閲覧。
- ^ ab 「拡張 for ループ - この新しい言語構造[...]」 『Java プログラミング言語、セクション: JDK 5 の拡張』。Sun Microsystems, Inc. 2004 。2009 年 5 月 26 日閲覧。
- ^ 「For-Each ループ」 「For-Each ループ」Sun Microsystems, Inc. 2008 . 2009-05-10に閲覧。
- ^ 「このインターフェースを実装すると、オブジェクトを "foreach" ステートメントのターゲットにすることができます。」 「Iterable (Java Platform SE 6)」。Sun Microsystems, Inc. 2004 。2009 年 5 月 12 日取得。
- ^ ab Bloch, Joshua (2018). 「Effective Java: プログラミング言語ガイド」(第3版). Addison-Wesley. ISBN 978-0134685991。
- ^ 「Array.prototype.forEach() - JavaScript | MDN」。2023年12月16日。
- ^ 「Object.keys」。Mozilla Developer Network 。 2014年5月7日閲覧。
- ^ “Lua プログラミング/テーブル - ウィキブック、オープンワールドのためのオープンブック”. en.wikibooks.org 。2017 年 12 月 6 日に取得。
- ^ Chu, Oliver. 「Mint Tutorial」 。 2013年10月20日閲覧。
- ^ 「制御フロー - Swift プログラミング言語 (Swift 5.5)」。
- ^ 「XSLT <xsl:for-each> 要素」W3Schools.com。
