-6

foreach ループ内の foreach:

var list1 = new List<int>() {0,1,2,3,4,5,6,7,8,9};
var list2 = new List<int>() {9,8,7,6,5,4,3,2,1,0};
foreach (var list1Value in list1)
{
    foreach (var list2Value in list2)
    {
        if (list1Value == list2Value)
            // do something
    }
}

または foreach ループ内の IEnumerable

var list1 = new List<int>() {0,1,2,3,4,5,6,7,8,9};
var list2 = new List<int>() {9,8,7,6,5,4,3,2,1,0}
var enumerator = (System.Collections.IEnumerator)list2.GetEnumerator();
foreach (var list1Value in list1)
{
    enumerator.Reset();
    while (enumerator.MoveNext())
    {
        if (list1Value == (int)enumerator.Current)
            // Do something
    }
}

私は読みやすさのために前者を好みますが、後者の方が効率的だと思います。コードは単なる例であり、実際に実行しているコードを示すものではないことに注意してください。

4

3 に答える 3

3

リストごとに 10 個の項目があるため、 の呼び出しによって保存された列挙子の 10 個の割り当てを誰も気にしませんReset。これは間違いなくマイクロ最適化ですが、2 番目のアプローチでは割り当てが節約されます。私は間違いなく最初のアプローチの読みやすさを向上させるか、次のようにLINQを追加します。

foreach (var list1Value in list1) {
    var tmp = list1Value;
    foreach (var list2Value in list2.Where(item => item == tmp)) {
        // Do something
    }
}
于 2013-05-20T15:46:24.447 に答える