我有List<SomeData> data;

public class SomeData
{
    public int Key { get; set;}
    public decimal Value { get; set;}
}


我也有List<int> DataOrder;

我需要按List<SomeData>data排序Key,并按与List<int> DataOrder值相同的顺序放置。

有什么通用的算法吗?

例:

List<SomeData> data = new List<SomeData>();
data.Add(new SomeData{ Key = 10, Value = 14 })
data.Add(new SomeData{ Key = 25, Value = 22 })
data.Add(new SomeData{ Key = 567, Value = 3 })
data.Add(new SomeData{ Key = 57, Value = 300 })
data.Add(new SomeData{ Key = 17, Value = 200 })
data.Add(new SomeData{ Key = 343, Value = 42 })

List<int> DataOrder = new List<int>{1, 25, 700, 567, 343, 350, 10};


排序后的结果:

foreach(var element in data)
{
     Console.WriteLine(element.Key);
}


出:

25
567
343
10
57
17


编辑:初始data数组可以具有Key,该数组不包含在DataOrder
该值应以任何顺序放在结果收集的末尾。
更改示例以说明它。

最佳答案

如何加入:

var mySortedList = (from i in DataOrder
            join d in data on i equals d.Key
            select new SomeData
            {
                Key = d.Key,
                Value = d.Value
            });


编辑:要还添加不共享data列表中的任何键的DataOrder中的那些值,您可以简单地将Union添加到结果中,如下所示:

var result = mySortedList.Union(data.Where(x => !DataOrder.Contains(x.Key)));

09-26 11:54