我有一个清单。
其中T是类,具有int和其他参数等属性
E.g。
ID Name
1 Apple
2 Banana
3 Test
现在我有另一个指定顺序的列表
Like 2,1,3
所以我想用2,1,3像Banana,Apple和Test
来对它们进行排序我如何实现这个IComaparer
目前我试了这个但是失败了
test = test.OrderBy(p=> SortableIntList.Contains(p.ID));
答案 0 :(得分:3)
要快速开始工作,
test = test
.Where(p => SortableIntList.Contains(p.ID))
.OrderBy(p => SortableIntList.IndexOf(p.ID));
为了提高效率,您可能希望将排序顺序存储在字典中(ID =>位置),然后将其称为
var SortableIntDictionary = SortableIntList
.Select((ID, Index) => new { ID, Index })
.ToDictionary(p => p.ID, p => p.Index);
test = test
.Where(p => SortableIntDictionary.ContainsKey(p.ID))
.OrderBy(p => SortableIntDictionary[p.ID]);
答案 1 :(得分:2)
试试这个,不需要比较器
// Setup test data
var orderList = new List<int> { 2, 1, 3 };
var stuffList = new List<Stuff> {
new Stuff { Id = 1, Name = "Apple" },
new Stuff { Id = 2, Name = "Banana" },
new Stuff { Id = 3, Name = "Test" }
};
// Do sort according to list
var result = orderList.Select(idx => stuffList.Where(s => s.Id == idx));
编辑:创建ID查找可能会更快:
var stuffDictionary = stuffList.ToDictionary(s => s.ID, s => s);
var result = orderList.Where(idx => stuffDictionary.ContainsKey(idx))
.Select(idx => stuffDictionary[idx]);