用c#中的ForEach语句迭代两个数组
本文关键字:两个 数组 迭代 中的 ForEach 语句 | 更新日期: 2023-09-27 18:10:49
我有2个数组
string[] Namesvalues = Names.Split(',');
string[] TotalValues = Total.Split(',');
上面的两个数组的值完全相等。我想做的是并行迭代两个数组,并从两个数组中逐一获取值。
有谁能告诉我怎么做吗?您可以简单地使用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-loop
和ElementAtOrDefault
的第二种方法与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];
}