オブジェクトのリストを開始値でソートする最良の方法は何ですか? 私のリストにはアイテムがあります:
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 で分割し、パーツを逆の順序で連結することもできます。