2012-05-21 10 views
5

私の問題は次のようなものです:動的なfor-loopレベルをコーディングする方法は?

私はいくつかのリストを並べ替える必要がありますが、リスト番号は分かりません。また、すべてのリストのすべての要素番号もわかりません。 Sicne私はすべてのリストの要素の組み合わせをトラバースしたい、1)リスト1からAを、リスト2からAを、リスト3からAを選択する。 2)リスト1からのA、リスト2からのA、リスト3からのB ...すべての置換のため。

 for (int i = 0; i < list[0].EnergyParameters.ListEnergyLevelCandidates.Count; i++) 
     { 
      for (int j = 0; j < list[1].EnergyParameters.ListEnergyLevelCandidates.Count; j++) 
      { 
       // Do sth 
      } 
     } 

私は、3つのリスト、お持ちの場合:リスト番号は不可知なので

 for (int i = 0; i < list[0].EnergyParameters.ListEnergyLevelCandidates.Count; i++) 
     { 
      for (int j = 0; j < list[1].EnergyParameters.ListEnergyLevelCandidates.Count; j++) 
      { 
       for (int k = 0; k < list[2].EnergyParameters.ListEnergyLevelCandidates.Count; k++) 
       { 
        // Do sth 
       } 
      } 
     } 

を、私は二つのリストを持っているかのように、その後、横断するため、ループネストされた私が使用

したがって、ネスト数は分かりません。つまり、forループのレベルをいくつ記述すればよいか分かりません。

動的なforループレベルのコードを作成するにはどうすればよいですか?私は10のリストに10のループを書いたくありません。

答えて

10

リストがいくつあるのかわからない場合は、ネストされたループを書きません。代わりに、再帰を記述します。

void AllCombos(List<string>[] lists, int level, string[] current) { 
    if (level == lists.Length) { 
     // Do somthing; items of current[] contain elements of the combination 
    } else { 
     foreach (var s in lists[level]) { 
      current[level] = s; 
      AllCombos(lists, level+1, current); 
     } 
    } 
} 

コールAllCombos次のように:

var lists = new List<string>[10]; 
for (int i = 0 ; i != 10 ; i++) { 
    lists[i] = PopulateMyList(i); 
} 
string[] current = new string[lists.Length]; 
AllCombos(lists, 0, current); 
+0

このまだexexuteマルチループしていますか?このようなあなたがループ単一のリストを呼び出しの各レベルで – Asker

+0

@Askerです。ループは、プログラムのソースにテキストでネストされていませんが、実行時にネストされます。 'AllCombos'がどう呼ぶか見てみましょうか?これは「魔法」が起こる場所です(それについてはまったく魔法はありませんが)。 – dasblinkenlight

+0

なぜ10は何ですか?最大の深さが仮定されているのか、それとも何ですか? –

関連する問題