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

adw*_*ard 1 c#

我有2个阵列

string[] Namesvalues = Names.Split(',');
string[] TotalValues = Total.Split(',');
Run Code Online (Sandbox Code Playgroud)

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

谁能告诉我怎么办?

Tim*_*ter 6

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

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

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

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

您还可以使用以下 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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