对具有起始值的对象列表进行排序的最佳方法是什么?我的清单有以下项目:
obj a
obj b
obj c
obj d
a.index = 1
b.index = 3
c.index = 2
d.index = 4
start value = 3;
排序列表必须是{b,d,a,c}
感谢帮助。
使用OrderBy
和ThenBy
组合。它将using System.Linq
在您的文件顶部使用。
var source = new List<Item>() {
new Item { index = 1, value = 'a' },
new Item { index = 3, value = 'b' },
new Item { index = 2, value = 'c' },
new Item { index = 4, value = 'd' },
};
int startValue = 3;
var sortedList = source.OrderBy(i => i.index < startValue)
.ThenBy(i => i.index)
.ToList();
foreach (var item in sortedList)
Console.WriteLine(string.Format("{0} - {1}", item.value, item.index));
Item
类定义:
class Item
{
public char value { get; set; }
public int index { get; set; }
}
返回所需的输出:
b - 3
d - 4
a - 1
c - 2
如果最大值已知,您可以执行特殊键功能,例如:
(item) => { return item.Index < MaxValue? MaxValue + item.Index: item.Index; }
并按其排序。如果 MaxValue 未知,您可以找到它。
或者您可以简单地对列表进行排序,然后将其按 StartValue 拆分并以相反的顺序连接各个部分。