用c#中的ForEach语句迭代两个数组

本文关键字:两个 数组 迭代 中的 ForEach 语句 | 更新日期: 2023-09-27 18:10:49

我有2个数组

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

两个数组的值完全相等。我想做的是并行迭代两个数组,并从两个数组中逐一获取值。

有谁能告诉我怎么做吗?

用c#中的ForEach语句迭代两个数组

您可以简单地使用for -loop:

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只组合元素,直到到达其中一个序列的结尾。

所以当你在for -循环中使用Math.Min而不是Math.Max时,你会得到类似的行为,但是你应该使用第一种方法,因为没有必要使用ElementAtOrDefault

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