C#LINQのAllとAnyの違いとは?使い方をサンプルコードで解説
C#のLINQには、シーケンス(コレクション)内の要素が条件を満たしているかどうかを判定するためのメソッドとして、「Any」と「All」の2つが用意されています。この2つは似たような用途で使われますが、判定のロジックがまったく異なります。
AnyメソッドとAllメソッドの基本的な違い
Any(predicate) メソッドは、ソースシーケンス内の要素のうち少なくとも1つが指定された述語(条件)に一致すれば true を返し、1つも一致しなければ false を返します。
一方、All(predicate) メソッドは、ソースシーケンス内のすべての要素が指定された述語に一致した場合にのみ true を返し、1つでも一致しない要素があれば false を返します。
つまり、Anyは「一つでも該当するか?」、Allは「全部該当するか?」を判定するメソッドだと言えます。なお、どちらのメソッドも条件判定が確定した時点で処理を打ち切る(短絡評価)ため、大きなコレクションでも効率的に動作します。
Anyメソッドの使用例
次の例では、リスト内に「1より小さい値」が存在するかどうかをAnyで判定しています。
static void Main(string[] args){
IEnumerable<double> doubles = new List<double> { 1.2, 1.7, 2.5, 2.4 };
bool result = doubles.Any(val => val < 1);
System.Console.WriteLine(result);
IEnumerable<double> doubles1 = new List<double> { 0.8, 1.7, 2.5, 2.4 };
bool result1 = doubles1.Any(val => val < 1);
System.Console.WriteLine(result1);
Console.ReadLine();
}実行結果
False True
最初のリスト { 1.2, 1.7, 2.5, 2.4 } には1未満の値が存在しないため「False」。2番目のリスト { 0.8, 1.7, 2.5, 2.4 } には 0.8 という1未満の値が含まれているため「True」となります。
Allメソッドの使用例
次の例では、リスト内のすべての要素が「1より小さい値」であるかどうかをAllで判定しています。
static void Main(string[] args){
IEnumerable<double> doubles = new List<double> { 0.8, 0.9, 0.6, 0.7 };
bool result = doubles.All(val => val < 1);
System.Console.WriteLine(result);
IEnumerable<double> doubles1 = new List<double> { 0.8, 0.9, 1.0, 0.7 };
bool result1 = doubles1.All(val => val < 1);
System.Console.WriteLine(result1);
Console.ReadLine();
}実行結果
True False
最初のリスト { 0.8, 0.9, 0.6, 0.7 } は全要素が1未満なので「True」。2番目のリスト { 0.8, 0.9, 1.0, 0.7 } には 1.0 という1未満ではない値が含まれているため「False」となります。
まとめ
- Any:条件に一致する要素が1つでもあれば true、なければ false
- All:すべての要素が条件に一致すれば true、1つでも不一致があれば false
補足として、空のコレクションに対しては Any は false、All は true を返すという仕様になっている点にも注意してください。「何もない状態では All の条件は満たされている(空虚な真)」とみなされるためです。用途に応じて両者を使い分けることで、コレクションの条件判定を簡潔に記述できます。
-
DirectX11とDirectX12の違いを徹底解説!ゲーマーが知っておくべきポイント
DirectXは、ソフトウェアがマルチメディアコンテンツを描画し、グラフィックハードウェアと通信するために使用されるAPI(アプリケーションプログラミングインターフェース)のコレクションです。DirectXの主要な構成要素であるDirect3Dは、ソフトウェアとグラフィックスハードウェア間の通信を担っています。ハードウェアは製品ごとに異なるため、標準化された関数や呼び出しのライブラリを通じてグラフィックカードと通信することで、ゲーム開発を大幅にスピードアップできます。これは「ハードウェア抽象化」と呼ばれ、APIの最も重要な役割となっています。車に例えてみましょう。1台の車の運転ができれば、ほぼ
-
C#の配列とリスト(List)の違いとは?特徴と基本的な使い方を解説
C#における配列(Array)とリスト(List<T>)は、どちらも複数のデータをまとめて扱うためのコレクションですが、その性質には重要な違いがあります。 配列とリストの主な違い 配列は、生成時にサイズが固定される、同じ型の要素を順番に格納するコレクションです。一度作成した後は要素数を変更できません。 一方、Listはジェネリックコレクションであり、要素の追加や削除に応じてサイズが自動的に拡張・縮小します。この柔軟性が最大の特徴です。 項目配列List<T> サイズ固定可変(動的) 要素の追加不可(再作成が必要)Addメソッドで可能 宣言方法型[] 変数名Lis