Dartでリストに要素が含まれるか検索する方法!【Flutter対応】

今回はDartでリストに要素が含まれるか検索する方法についてです。

Dart(Flutter)で開発をしていると、「このリストに特定の値が含まれているか調べたい」という場面はよくあります。
例えば、次のようなケースです。

  • Todoリストに同じ項目を追加しないようにしたい
  • APIから取得したデータに特定の値が含まれているか確認したい
  • ユーザー入力がリスト内に存在するか判定したい

この記事では、Dartでリストに要素が含まれるかを検索する方法を、Flutterでも使えるコード例付きで解説します。

※ 載せているコードはFlutter 3.29.3 / Dart 3.7.2で動作を確認しています。

結論:containsメソッドを使うのが基本

Dartでリストに特定の要素が含まれているかを調べるには、
containsメソッドを使うのが最もシンプルです。

final list = ['apple', 'banana', 'orange'];

final result = list.contains('banana');

print(result); // true

この例ではlistという文字列のリストを作っています。
その次の処理で、containsメソッドを使って、引数で含むか調べたい値を渡しています。

結果渡した「banana」が含まれるのでtrueが返ってきます。

なぜcontainsメソッドが使われるのか

containsメソッドは、リスト内に指定した値が1つでも存在するかtrue / false で返します。

  • 書き方がシンプル
  • 可読性が高い
  • Flutterでもそのまま使える

そのため、完全一致での存在チェックにはまずこの方法を使うのが定番です。
完全一致じゃない場合は、falseになるので、containsメソッドに渡す引数には注意しましょう。

例えば、「Banana」と「banana」のように大文字・小文字が違う場合も一致しないので注意が必要です。

実践例:Flutterでの使用シーン

例えば、ボタンを押したときに
すでに存在するアイテムなら追加しない、という処理は次のように書けます。

final items = ['A', 'B', 'C'];

void addItem(String value) {
  if (!items.contains(value)) {
    items.add(value);
  }
}

addItemというメソッドがボタンに紐づいて動作するとします。
このメソッドの処理では、画面から渡された文字列変数valueが含まれていなかった(false)なら、itemsリストに追加するようにしています。

このように、containsメソッドは重複チェック入力バリデーションでも使われます。

条件付きで検索したい場合は where / any を使う

「完全一致ではなく、条件に合うかを調べたい」という場合はwhereメソッドやanyメソッドを使います。

anyメソッドを使う例(1件でも一致すればOK)

anyメソッドは条件にひとつでも一致すればtrue、一致しなければfalseを返します。

final numbers = [10, 20, 30];

final exists = numbers.any((n) => n > 25);

print(exists); // true

numbersリストを作成して、次の処理でanyメソッドを使って要素を「25」と比較しています。
リストには30が含まれ、一致する要素があるのでtrueが返ってきます。

whereメソッドを使う例(一致する要素を取得)

whereメソッドは条件に一致する要素を全て取得します。

final result = numbers.where((n) => n > 25).toList();

print(result); // [30]

先ほどのnumbersリストに対して、whereメソッドを使用しています。

whereメソッドの戻り値は Iterable 型のため、そのままではリストとして扱えません。
そのため、.toListを書くことで、リストとして返しています。

25」以上の要素は30なので、30のみがひとつだけ入ったリストが返ってきます。
条件にあう値が複数あった場合は、複数の値が入ったリストが返ってきます。

単純に条件一致する要素があるかだけでなく、一致する要素を使う場合に使用すると良いです。

contains / any / where の使い分け

方法 用途
contains 完全一致の存在チェック
any 条件に一致する要素があるか
where 条件に一致する要素一覧を取得

まとめ

Dartでリストに要素が含まれるかを調べる方法は、次のとおりです。

  • 完全一致(完全一致する要素があるか) → contains()
  • 条件付きチェック(条件に合う値があるか) → any()
  • 条件付き抽出(要素を取り出したい) → where()

まずはcontainsメソッドを基本として覚えて、用途に応じて他のメソッドを使い分けていきましょう。

コメント