我可以在一个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;
}
}
有可能吗?
或者有更好的方法吗?
答案 0 :(得分:1)
您可以使用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
}
答案 1 :(得分:1)
如果两个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)
{
}
答案 2 :(得分:0)
如果estimatedProxiSize
和planAddedAndModifiedSize
具有相同数量的元素,则可以使用IEnumrable<T>.Zip
:
estimatedProxiSize.Zip(planAddedAndModifiedSize,(estim,plan)=> estim * plan));
答案 3 :(得分:-1)
//Here, I need something like:
foreach (var itemx in listaX and var itemy)
{
Double xy = itemx*itemxy;
}
这听起来像是一个完整的笛卡尔积,即numItems = listAx.Count * listaY.Count。
您需要2个循环:
foreach (var itemx in listaX)
{
foreach (var itemy in listaY)
{
Double xy = itemx*itemxy;
... // use it
}
}