阅读链接列表
本文关键字:列表 链接 | 更新日期: 2023-09-27 18:32:44
我可以在一个foreach中读取两个链接列表吗?
我该怎么做?
这是我的代码:
LinkedList<Double> estimatedProxiSize = new LinkedList<Double>();
LinkedList<Double> planAddedAndModifiedSize = new LinkedList<Double>();
estimatedProxiSize.AddLast(Convert.ToDouble(130));
estimatedProxiSize.AddLast(Convert.ToDouble(650));
estimatedProxiSize.AddLast(Convert.ToDouble(99));
estimatedProxiSize.AddLast(Convert.ToDouble(150));
estimatedProxiSize.AddLast(Convert.ToDouble(128));
planAddedAndModifiedSize.AddLast(Convert.ToDouble(163));
planAddedAndModifiedSize.AddLast(Convert.ToDouble(765));
planAddedAndModifiedSize.AddLast(Convert.ToDouble(141));
planAddedAndModifiedSize.AddLast(Convert.ToDouble(166));
planAddedAndModifiedSize.AddLast(Convert.ToDouble(137));
calc(listaX,listaY);
public void calc(LinkedList<Double> listaX, LinkedList<Double> listaY)
{
//Here, I need something like:
foreach (var itemx in listaX and var itemy)
{
Double xy = itemx*itemxy;
}
}
可能吗?
还是有更好的方法
如果两个LinkedList(T)
大小相同,则Enumerable.Zip
将起作用。
否则,您可以自己滚动:
public static class EnumerableExtensions
{
public static IEnumerable<TResult> Zip<T, TResult>(
this IEnumerable<T> first,
IEnumerable<T> second,
Func<T, T, TResult> resultSelector
)
{
using(var firstEnumerator = first.GetEnumerator())
using(var secondEnumerator = second.GetEnumerator())
{
while(firstEnumerator.MoveNext() && secondEnumerator.MoveNext())
{
yield return resultSelector(firstEnumerator.Current,
secondEnumerator.Current);
}
}
}
}
用法:
foreach(var item in listaX.Zip(listaY, (x, y) => x * y)
{
}
可以使用Zip
将每个列表中处于相同位置的项合并到单个对象中,然后迭代生成的序列:
var zipped = listaX.Zip(listaY, (x, y)=>new{x,y});
foreach(var pair in zipped)
{
double product = pair.x * pair.y;
}
或者,为了简化一下这种特定情况:
var products = listaX.Zip(listaY, (x, y) => x * y);
foreach(double product in products)
{
//do stuff with product
}
如果estimatedProxiSize
和planAddedAndModifiedSize
具有相同数量的元素,则可以IEnumrable<T>.Zip
estimatedProxiSize.Zip(planAddedAndModifiedSize,(estim,plan)=> estim * plan));