按 list1 对 list2 排序
Sort list2 by list1
我有清单 1:
"John Doe"
"Jack Smith"
"Peter Miller"
并在每个项目上使用一个函数:
List<Person> list2 = new List<Person>();
foreach(string name in list1) list2.Add(GetPersonByName(name));
我制作了列表 2(缩短了,真正的有 30 多个属性):
{Name:"John Doe", Age:55, RoomNo:203}
{Name:"Jack Smith", Age:40, RoomNo:203}
{Name:"Peter Miller", Age:31, RoomNo:202}
到目前为止,还不错。
现在我决定并行执行:
List<Person> list2 = new List<Person>();
Parallel.ForEach(list1, person => { list2.Add(GetPersonByName(name)); });
这可能会导致无序列表2。
如何有效地将 list2 排序为与 list1 相同的顺序?
或者有没有办法告诉并行 foreach 按照输入列表的顺序执行 list2.Add? (GetPersonByName
函数是重函数 - 但不是计算,主要是等待。)
您应该能够使用 AsParallel()
, and use the order preservation technique 并行化转换,以便顺序保持不变:
List<Person> list2 = list1.AsParallel().AsOrdered()
.Select(name => GetPersonByName(name))
.ToList();
编辑: 添加 .AsOrdered()
和 link 到 MSDN 文章以回应 CSharpie 的评论。
我有清单 1:
"John Doe"
"Jack Smith"
"Peter Miller"
并在每个项目上使用一个函数:
List<Person> list2 = new List<Person>();
foreach(string name in list1) list2.Add(GetPersonByName(name));
我制作了列表 2(缩短了,真正的有 30 多个属性):
{Name:"John Doe", Age:55, RoomNo:203}
{Name:"Jack Smith", Age:40, RoomNo:203}
{Name:"Peter Miller", Age:31, RoomNo:202}
到目前为止,还不错。
现在我决定并行执行:
List<Person> list2 = new List<Person>();
Parallel.ForEach(list1, person => { list2.Add(GetPersonByName(name)); });
这可能会导致无序列表2。
如何有效地将 list2 排序为与 list1 相同的顺序?
或者有没有办法告诉并行 foreach 按照输入列表的顺序执行 list2.Add? (GetPersonByName
函数是重函数 - 但不是计算,主要是等待。)
您应该能够使用 AsParallel()
, and use the order preservation technique 并行化转换,以便顺序保持不变:
List<Person> list2 = list1.AsParallel().AsOrdered()
.Select(name => GetPersonByName(name))
.ToList();
编辑: 添加 .AsOrdered()
和 link 到 MSDN 文章以回应 CSharpie 的评论。