この記事は 2026 年 8 月 12 日に投稿しました。

目次
1. はじめに
こんにちは、iOS のエディタアプリPWEditorとその後継PWEditorNextの開発者の二俣です。 2018年5月から毎日技術ブログを更新しています。
今回はDartのHashSetに条件を満たす要素が1つでも存在するか調べるanyメソッドについてです。
2. DartのHashSetで条件を満たす要素があるか調べる
DartのHashSetで、指定した条件を満たす要素が1つでも存在するか調べるには、anyメソッドを使用します。
anyメソッドの形式は以下になります。
bool any(bool test(E element))
引数testに、各要素を受け取って条件を判定する関数を指定します。
条件を満たす要素が1つでも存在する場合はtrue、1つも存在しない場合はfalseを返します。
例えば、整数を格納したHashSetに10以上の要素が存在するか調べる場合は次のようになります。
実装例
import 'dart:collection'; void main() { final set = HashSet<int>(); set.addAll([ 3, 8, 12, 5, ]); final result = set.any((value) => value >= 10); print(result); }
実行結果
true
この例では、HashSetに格納されている各要素について、
(value) => value >= 10
という条件で判定しています。
12が10以上という条件を満たしているため、anyメソッドはtrueを返します。
文字列に対して条件を指定することもできます。
例えば、Aから始まる文字列が存在するか調べる場合は次のようになります。
import 'dart:collection'; void main() { final set = HashSet<String>(); set.addAll([ 'Apple', 'Orange', 'Banana', ]); final result = set.any((value) => value.startsWith('A')); print(result); }
実行結果
true
AppleがAから始まっているため、trueが返されます。
このようにanyメソッドを使用すると、HashSetに格納されている要素を自分でループして調べなくても、条件を満たす要素が存在するか簡潔に確認できます。
3. 複数の条件を指定する
anyメソッドに指定する関数では、複数の条件を組み合わせることもできます。
例えば、10以上かつ20未満の要素が存在するか調べる場合は次のようになります。
import 'dart:collection'; void main() { final set = HashSet<int>(); set.addAll([ 5, 12, 25, 30, ]); final result = set.any( (value) => value >= 10 && value < 20, ); print(result); }
実行結果
true
12が、
value >= 10 && value < 20
という条件を満たしているため、trueが返されます。
文字列でも複数の条件を組み合わせられます。
例えば、文字列がAから始まり、かつ5文字以上であるか調べる場合は次のようになります。
import 'dart:collection'; void main() { final set = HashSet<String>(); set.addAll([ 'Apple', 'Orange', 'Banana', ]); final result = set.any( (value) => value.startsWith('A') && value.length >= 5, ); print(result); }
実行結果
true
AppleはAから始まり、文字数も5文字なので条件を満たします。
条件が複雑な場合は、判定する関数を別に定義することもできます。
import 'dart:collection'; bool isTarget(int value) { return value >= 10 && value < 20; } void main() { final set = HashSet<int>(); set.addAll([ 5, 12, 25, 30, ]); final result = set.any(isTarget); print(result); }
このように、anyメソッドに渡す関数を変更することで、さまざまな条件で要素の存在を確認できます。
4. 条件を満たす要素がない場合
条件を満たす要素が1つも存在しない場合、anyメソッドはfalseを返します。
実装例
import 'dart:collection'; void main() { final set = HashSet<int>(); set.addAll([ 3, 5, 8, ]); final result = set.any((value) => value >= 10); print(result); }
実行結果
false
この例では、10以上の要素が1つも存在しないため、falseが返されます。
また、空のHashSetに対してanyメソッドを使用した場合もfalseが返されます。
import 'dart:collection'; void main() { final set = HashSet<int>(); final result = set.any((value) => value >= 10); print(result); }
実行結果
false
空のHashSetには条件を満たす要素が存在しないためです。
そのため、
if (set.any((value) => value >= 10)) { print('10以上の要素があります'); }
のように記述すれば、HashSetが空の場合も含めて、条件を満たす要素が存在する場合だけ処理を実行できます。
また、anyメソッドは条件を満たす要素が見つかると、それ以降の要素を調べる必要がありません。
例えば、単に「条件を満たす要素が存在するか」を確認したい場合は、すべての要素を自分で調べる処理を書くよりも、anyメソッドを使用すると処理の意図もわかりやすくなります。
5. containsメソッドとの違い
HashSetに要素が存在するか確認する方法として、containsメソッドもあります。
containsメソッドの形式は以下になります。
bool contains(Object? value)
containsメソッドは、指定した値と同じ要素が存在するかを調べる場合に使用します。
例えば、Appleが存在するか調べる場合は次のようになります。
import 'dart:collection'; void main() { final set = HashSet<String>(); set.addAll([ 'Apple', 'Orange', 'Banana', ]); final result = set.contains('Apple'); print(result); }
実行結果
true
一方、anyメソッドでは関数を使用して条件を指定できます。
final result = set.any( (value) => value.startsWith('A'), );
この場合は、特定の値が存在するかではなく、Aから始まる文字列が1つでも存在するかを確認しています。
そのため、
set.contains('Apple');
は「Appleという要素が存在するか」を調べる処理で、
set.any((value) => value.startsWith('A'));
は「Aから始まる要素が存在するか」を調べる処理になります。
特定の値が存在するか確認したい場合はcontainsメソッド、条件を満たす要素が存在するか確認したい場合はanyメソッドというように使い分けるとよさそうです。
なお、anyメソッドはHashSet固有のメソッドではなく、Iterableで定義されているメソッドです。
そのため、ListやSetなど、ほかのIterableでも同じように使用できます。
リファレンス
6. おわりに
HashSetで条件を満たす要素が1つでも存在するか調べるには、anyメソッドを使用します。
anyメソッドには各要素を受け取ってbool値を返す関数を指定し、条件を満たす要素が1つでも存在する場合はtrue、存在しない場合はfalseを返します。
例えば、
set.any((value) => value >= 10);
とすると、10以上の要素が存在するか確認できます。
また、
set.any( (value) => value >= 10 && value < 20, );
のように複数の条件を組み合わせることもできます。
特定の値そのものが存在するか確認するcontainsメソッドに対し、anyメソッドでは任意の条件を指定できる点が大きな違いです。
特定の値が存在するか確認したい場合はcontainsメソッド、条件を満たす要素が存在するか確認したい場合はanyメソッドというように使い分けるとよさそうです。
私が技術者として所属している ニューラル では、 組み込み・制御系ソフトウェアを中心に、モバイルアプリや業務アプリなど、さまざまなソフトウェアの開発を行っています。
組み込み分野では、リアルタイムOSを利用したシステム開発をはじめ、弊社製品のハイブリッドOS Bi-OS など、長年培ってきた組み込み・制御系の技術を活かした開発に取り組んでいます。
また、iOS(Swift/SwiftUI)やWindows(C#)をはじめとしたアプリケーション開発、Webシステムの開発などにも対応しています。
組み込みソフトウェア、モバイルアプリ、Windowsアプリ、Webシステムなど、ソフトウェア開発に関するご相談がございましたら、お気軽にお問い合わせください。
また、ニューラルでは一緒にソフトウェア開発に取り組んでいただける技術者の方も募集しています。 ご興味がございましたら、お気軽にお問い合わせください。
EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp TEL : 042-523-3663 FAX : 042-540-1688