[英]How to packing the results of List.ForEach() to a new list?
我正在学习C#。
我有两个相同类型的列表。
struct Foo
{
string fKey;
Bar bVal;
}
List<Foo> f1; List<Foo> f2;
现在f1和f2包含相同数量的元素,f1中的每个fKey也存在于f2中,但位置不同。
我想要做的是在fKey上加入这两个列表,对Bar值进行一些操作(某种合并),然后将结果存储到新的List中。
Foo Merge(Foo f1, Foo f2)
{
// Merge
return new Foo(f1);
}
为此,我到达了这里。
f1.Join(f2, oldFoo => oldFoo.fKey, newFoo => newFoo.fKey, (oldFoo, newFoo) => new { myOldFoo = oldFoo, myNewFoo = newFoo } // Join on the fKey attribute
).ToList(). // Dump the results to a list
ForEach(aPair => Merge(aPair.myNewFoo, aPair.myOldFoo));
在命令式编程中,我会将Merge()的返回值推到新的List中。 在这个构想中我该怎么做?
在“ Select
投影中执行“ Merge
操作,然后使用“ ToList
将结果具体化为列表。
var l = f1.Join(f2, oldFoo => oldFoo.fKey, newFoo => newFoo.fKey,
(oldFoo, newFoo) => new { myOldFoo = oldFoo, myNewFoo = newFoo })
.Select(aPair => Merge(aPair.myNewFoo, aPair.myOldFoo))
.ToList();
编辑 :为简单起见,我假设您可以将Merge
到Join
中:
var l = f1.Join(f2, oldFoo => oldFoo.fKey, newFoo => newFoo.fKey,
(oldFoo, newFoo) => Merge(newFoo, oldFoo))
.ToList();
这正是ConvertAll()
函数的作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.