按 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 的评论。