繁体   English   中英

使用 foreach 循环遍历两个列表

[英]Using foreach loop to iterate through two lists

我有两个清单

List<object> a = new List<object>();
List<object> b = new List<object>();

现在我想遍历两个列表的元素。 我可以通过为每个列表编写一个 foreach 循环来做到这一点。 但也有可能做这样的事情吗?

foreach(object o in a, b) {
 o.DoSomething();
}

如果这样的事情是可能的,那也很好:

foreach (object o in a && b) {
   o.DoSomething();
}
foreach(object o in a.Concat(b)) {
 o.DoSomething();
}

如果你想单独遍历它们,那么你可以使用已经指出的Enumerable.Concat

如果你想同时遍历两个列表,从循环中的每个列表访问一个元素,那么在.NET 4.0中有一个可以使用的方法Enumerable.Zip

int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };

var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second);

foreach (var item in numbersAndWords)
{
    Console.WriteLine(item);
}

结果:

1 one
2 two
3 three
foreach(object o in a.Concat(b)) {
 o.DoSomething();
}

如果你想同时迭代两个相同长度的列表(特别是在测试中比较两个列表的场景中),我认为for循环更有意义:

for (int i = 0; i < list1.Count; i++) {
    if (list1[i] == list2[i]) {
        // Do something
    }
}

这是你可以做到的另一种方式:

for (int i = 0; i < (a.Count > b.Count ? a.Count : b.Count); i++)
{
    object objA, objB;
    if (i < a.Count) objA = a[i];
    if (i < b.Count) objB = b[i];

    // Do stuff
}

简单地说,我们可以使用 for 循环来实现

 int[] numbers = { 1, 2, 3, 4 };
    string[] words = { "one", "two", "three" };
    
     for (int i = 0; i < numbers .Count; i++)
                {
    var list1=numbers [i];
    var list 2=words[i];
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM