2

オブジェクトのリストを開始値でソートする最良の方法は何ですか? 私のリストにはアイテムがあります:

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}

手伝ってくれてありがとう。

4

2 に答える 2

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
于 2013-04-05T12:05:29.377 に答える
1

最大値がわかっている場合は、次のような特別なキー機能を実行できます。

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

そして並べ替えます。MaxValue が不明な場合は、見つけることができます。

または、単にリストを並べ替えてから、StartValue で分割し、パーツを逆の順序で連結することもできます。

于 2013-04-05T12:08:54.070 に答える