文字列のリストを並べ替えるには、アンダースコア「_」で始まるアイテムをリストの一番下に並べるのに適切な方法は何ですか。それ以外の場合はすべてアルファベット順です。
今私はこのようなことをしています
autoList.OrderBy(a => a.StartsWith("_") ? "ZZZZZZ"+a : a )
カスタムの順序付けが必要で、比較演算子を提供したくない場合は、それを使用できます-SQLスタイル:
autoList
.OrderBy(a => a.StartsWith("_") ? 2 : 1 )
.ThenBy(a => a);
OrderBy(Func<>, IComparer<>)
を使用して、カスタムロジックを実装する独自の Comparer
を指定する必要があると思います。
IComparer
を受け取るOrderByのオーバーロードを使用します。最初のFunc
引数が比較演算子に供給され、そこから文字列を比較する必要があります。最初に一方または両方が_
で始まる場合に対処し、次にそこから_
を取り除き、標準のstring.Compare
を使用して最初の_
を超えて並べ替える必要があります。