数字のリストがある場合:
1,2,3,4,5,6,7,8
特定の番号で注文してから残りを表示したいです。たとえば、「3」を選択した場合、リストは次のようになります。
3,1,2,4,5,6,7,8
Linqとc#を探しています。ありがとうございました
OrderBy
またはThenBy
で比較を使用して、条件付きソートを実行できます。
list.OrderByDescending(i => i == 3).ThenBy(i => i);
最初に一致結果が必要なため、OrderByDescending
を使用します(true
はfalse
よりも「高い」)。
たぶんこのようなもの:
List<int> ls=new List<int>{1,2,3,4,5,6,7,8};
int nbr=3;
var result= ls.OrderBy (l =>(l==nbr?int.MinValue:l));
いくつかの回答は、最後の数を既に並べ替えています(既に並べ替えられたリストのみを表示しているため、正しいかもしれません)。 「選択されていない」番号を元の、必ずしもソートされた順序ではなく、ソートされた順序で表示する場合は、代わりに行うことができます。
int num = 3;
var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
@DuaneTheriotが指摘しているように、 IEnumerableの拡張メソッドOrderBy は安定したソートを行い、等しいキーを持つ要素の順序を変更しません。言い換えると;
var result = list.OrderBy(x => x != 3);
同様に機能して、最初に3をソートし、他のすべての要素の順序を維持します。
public static IEnumerable<T> TakeAndOrder<T>(this IEnumerable<T> items, Func<T, bool> f)
{
foreach ( var item in items.Where(f))
yield return item;
foreach (var item in items.Where(i=>!f(i)).OrderBy(i=>i))
yield return item;
}
var items = new [] {1, 4, 2, 5, 3};
items.TakeAndOrder(i=> i == 4);