Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Enumerable.Any() / All() / Contains()
シーケンスに対して条件判定や要素の存在確認を行う LINQ の拡張メソッドです。
構文
using System.Linq; // 1 つでも条件を満たす要素があるか(空の場合は false) bool any = source.Any(); bool any = source.Any(x => 条件); // すべての要素が条件を満たすか(空の場合は true) bool all = source.All(x => 条件); // 指定した値が含まれているか bool has = source.Contains(値); bool has = source.Contains(値, IEqualityComparer<T>);
メソッド一覧
| メソッド | 概要 |
|---|---|
| Any() | シーケンスに要素が 1 つでも存在すれば『true』を返します。 |
| Any(predicate) | 条件を満たす要素が 1 つでもあれば『true』を返します。 |
| All(predicate) | すべての要素が条件を満たせば『true』を返します。空のシーケンスは常に『true』です。 |
| Contains(value) | 指定した値がシーケンスに含まれていれば『true』を返します。 |
| Contains(value, comparer) | カスタム比較子を使って値の存在を確認します。 |
| SequenceEqual(second) | 2 つのシーケンスの要素が順序込みで等しければ『true』を返します。 |
サンプルコード
using System;
using System.Collections.Generic;
using System.Linq;
List<int> scores = new List<int> { 80, 95, 70, 88, 60, 92 };
// Any: 1 件でも条件を満たす要素があるか確認します。
Console.WriteLine(scores.Any()); // true(要素がある)
Console.WriteLine(scores.Any(s => s >= 90)); // true(90 点以上が存在する)
Console.WriteLine(scores.Any(s => s > 100)); // false(100 点超はいない)
// All: すべての要素が条件を満たすか確認します。
Console.WriteLine(scores.All(s => s >= 60)); // true(全員 60 点以上)
Console.WriteLine(scores.All(s => s >= 80)); // false(80 点未満がいる)
// Contains: 特定の値が含まれているか確認します。
Console.WriteLine(scores.Contains(88)); // true
Console.WriteLine(scores.Contains(100)); // false
// 空のシーケンスでの挙動
List<int> empty = new List<int>();
Console.WriteLine(empty.Any()); // false
Console.WriteLine(empty.All(n => n > 0)); // true(空は常に true)
// 文字列リストで大文字・小文字を無視して Contains を使います。
List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" };
bool hasApple = fruits.Contains("apple", StringComparer.OrdinalIgnoreCase);
Console.WriteLine(hasApple); // true
// SequenceEqual で 2 つのシーケンスが等しいか確認します。
List<int> a = new List<int> { 1, 2, 3 };
List<int> b = new List<int> { 1, 2, 3 };
List<int> c = new List<int> { 3, 2, 1 };
Console.WriteLine(a.SequenceEqual(b)); // true(順序・値が同じ)
Console.WriteLine(a.SequenceEqual(c)); // false(順序が違う)
概要
『Any()』と『All()』は短絡評価(ショートサーキット)で動作します。『Any()』は条件を満たす要素を見つけた時点で走査を止め、『All()』は条件を満たさない要素を見つけた時点で走査を止めます。
『All()』は空のシーケンスに対して常に『true』を返します(全称命題の空虚な真)。空チェックが必要な場合は先に『Any()』で要素の有無を確認してください。
要素数で空チェックをするより『Any()』の方がパフォーマンス上有利です。件数が必要な場合は『Enumerable.Count()』を、特定の条件で絞り込みたい場合は『Enumerable.Where()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。