在C#中使用ForEach语句迭代两个数组

时间:2014-06-30 06:52:27

标签: c#

我有2个阵列

string[] Namesvalues = Names.Split(',');
string[] TotalValues = Total.Split(',');

上面两个数组都有完全相等的值。我想要做的是并行迭代上面两个数组,并希望从两个数组中逐个获取值。

任何人都可以告诉我该怎么办?

2 个答案:

答案 0 :(得分:6)

你可以简单地使用for - 循环:

for(int i = 0; i < NamesValues.Length; i++)
{
    string name = NamesValues[i];
    string totalValue = TotalValues[i];
}

如果长度不同,您可以使用ElementAtOrDefault

for(int i = 0; i < Math.Max(NamesValues.Length, TotalValues.Length) ; i++)
{
    string name = NamesValues.ElementAtOrDefault(i);
    string totalValue = TotalValues.ElementAtOrDefault(i);
}

您还可以使用Enumerable.Zip创建包含两个值的匿名类型:

var namesAndValues = NamesValues.Zip(TotalValues, 
    (n, tv) => new { Name = n, TotalValue = tv });
foreach(var nv in namesAndValues)
{
    Console.WriteLine("Name: {0} Value: {1}", nv.Name + nv.TotalValue);
}

请注意,使用for-loopElementAtOrDefault的第二种方法与Enumerable.Zip方法不同。

  • 前者迭代两个数组完全ElementAtOrDefault返回null,如果该索引中没有元素,则返回较小数组的值。
  • 后者Zip仅将元素组合到其中一个序列的结尾

因此,当您在Math.Min - 循环中使用Math.Max代替for时,您会得到类似的行为,但是您应该使用第一种方法,因为不需要{{ 1}}。

答案 1 :(得分:0)

//exactly equal length
for (int i = 0; i < Namesvalues.Length; i++)
{
    var name = Namesvalues[i];
    var total = TotalValues[i];
}