LINQ で要素の順序を維持する
プログラミングでは、順序付けられたデータを処理するのが一般的なシナリオです。 LINQ to Objects を使用して配列を操作する場合、誤った変更を避けるために、どの操作が要素の順序を保持するかを理解することが重要です。
順序を維持する操作
次の LINQ 操作は、配列要素の元の順序を維持します。
-
AsEnumerable: IEnumerable を非ジェネリック IEnumerable に変換します。
-
Cast: 順序を変更せずに要素を別の型に変換します。
-
Concat: 各シーケンスの順序を維持しながら、2 つ以上のシーケンスを結合します。
-
Select: 各要素を新しい値に射影しますが、順序は維持します。
-
ToArray: 順序を維持しながら、IEnumerable を配列に実体化します。
-
ToList: 元の順序を維持したまま、IEnumerable を List に具体化します。
順序を維持するいくつかの操作
一部の LINQ 操作では、残りの要素の順序を変更せずに要素をフィルターまたは追加します。
-
Distinct: 重複した要素を削除します (等価比較に基づいて)。 (以下の説明を参照)
-
Except: 元のシーケンスの順序を維持したまま、指定されたシーケンス内に見つからない要素を返します。
-
Intersect: 最初のシーケンスの順序を維持したまま、両方のシーケンスで見つかった要素を返します。
-
OfType: 順序を維持して、特定のタイプの要素をフィルターします。
-
Prepend (.NET 4.7.1 の新機能): シーケンスの先頭に要素を追加します。
-
スキップ: シーケンスの先頭で指定された数の要素をスキップし、残りの要素の順序を維持します。
-
Skipwhile: 述語が false になるまで要素をスキップし、残りの要素の順序を維持します。
-
Take: 順序を維持して、シーケンスの先頭にある指定された数の要素を返します。
-
Takewhile: 述語が false になるまで、順序を維持して要素を返します。
-
Where: 述語に基づいて要素をフィルターし、一致する要素の順序を維持します。
-
Zip (.NET 4 の新機能): 2 つのシーケンスの要素をペアにして、各シーケンスの順序を保持します。
順序を破壊する操作
次の LINQ 操作では、要素の元の順序が保持されません:
-
ToDictionary: シーケンスを辞書に変換します。辞書は順序を維持しません。
-
ToLookup: ToDictionary と同様に、順序は保持されません。
操作の順序を再定義します
これらの LINQ 操作は、結果の順序を明示的に変更します。
- Orderby: key選択者に従って要素に従って要素を並べ替えます。
OrderByDessending:
キー選択担当者に従って、注文選択者に従って要素を並べ替えます。 -
逆:要素を逆転させる順序。
- then:OrderbyまたはOrderBydesmentingで結合し、2番目のキーでソートします。
thenbydescending:- OrderbyまたはOrderByDessendingと結合し、2番目のキーでソートします。
特別な状況-
GroupBy:
グループオブジェクトの順序は、各グループの最初の要素の順序に基づいています。グループ内の要素は、ソースシーケンスの順序で返されます。
groupjoin:外部シーケンス内の要素の順序と、各外部要素の内部シーケンスの一致する要素の順序。
結合:- GroupJoinと同様に、外部シーケンスの要素の順序を保持し、内部シーケンスを一致させます。
selectmany:
順序は、ソース要素の順序とセレクター関数によって返されるシーケンスによって決定されます。 -
ユニオン:2つのシーケンスからの要素は、元の順序で生成され、繰り返されません。
- 説明:
.NETでの実装に基づいて、分布は「維持された順序」カテゴリに移動しました。
以上がどのlinq操作が順序で要素の順序を保持しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。