我有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)));
关于c# - 按另一个集合值对集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672401/