関連するコレクションを反復処理する必要があるのは、特にコードをよりデータ駆動型にしようとする場合によくあることです。たとえば、次のようなコードを書き終えました。
string[] entTypes = {"DOC", "CON", "BAL"};
string[] dateFields = {"DocDate", "ConUserDate", "BalDate"};
Debug.Assert(entTypes.Length == dateFields.Length);
for (int i=0; i<entTypes.Length; i++)
{
string entType = entTypes[i];
string dateField = dateFields[i];
// do stuff with the associated entType and dateField
}
Python では、次のように記述します。
items = [("DOC", "DocDate"), ("CON", "ConUserDate"), ("BAL", "BalDate")]
for (entType, dateField) in items:
# do stuff with the associated entType and dateField
並列配列を宣言する必要はありません。配列が同じ長さであることを主張する必要もありません。項目を取得するためにインデックスを使用する必要もありません。
LINQ を使用して C# でこれを行う方法があるように感じますが、それが何であるかわかりません。関連する複数のコレクションを反復処理する簡単な方法はありますか?
編集:
これは少し良いと思います-少なくとも、宣言時にコレクションを手動で圧縮する余裕があり、すべてのコレクションに同じタイプのオブジェクトが含まれている場合:
List<string[]> items = new List<string[]>
{
new [] {"DOC", "DocDate"},
new [] {"CON", "ConUserDate"},
new [] {"SCH", "SchDate"}
};
foreach (string[] item in items)
{
Debug.Assert(item.Length == 2);
string entType = item[0];
string dateField = item[1];
// do stuff with the associated entType and dateField
}