使用起始值对对象列表进行排序的最佳方法是什么?

时间:2013-04-05 12:01:16

标签: c# linq sorting

使用起始值对对象List进行排序的最佳方法是什么?我的清单中有以下项目:

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}

感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

使用OrderByThenBy组合。它可以在您的文件顶部使用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

答案 1 :(得分:1)

如果已知最大值,您可以执行特殊键功能,例如:

(item) => { return item.Index < MaxValue? MaxValue + item.Index: item.Index; }

并按它排序。如果MaxValue未知,你可以找到它。

或者您可以简单地对列表进行排序,然后通过StartValue将其拆分并以相反的顺序连接部分。