プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

DartのHashSetから同値の要素を取得する

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

目次

  1. はじめに
  2. DartのHashSetから同値の要素を取得する
  3. lookupメソッドの基本的な使い方
  4. 同値な要素と同一のオブジェクトの違い
  5. lookupメソッドを使用する場合の注意点
  6. おわりに

1. はじめに

こんにちは、iOS のエディタアプリPWEditorとその後継PWEditorNextの開発者の二俣です。
2018年5月から毎日技術ブログを更新しています。

今回はDartHashSetから、指定した値と同値の要素を取得できるlookupメソッドについてです。

目次へ

2. DartのHashSetから同値の要素を取得する

DartHashSetSetを実装しているため、lookupメソッドを使用できます。

lookupメソッドの形式は以下になります。

E? lookup(Object? object)

引数に指定したオブジェクトと同値の要素がHashSetに存在する場合、そのHashSetに格納されている要素を返します。
存在しない場合はnullを返します。

import 'dart:collection';

void main() {
  final numbers = HashSet<int>.from([1, 2, 3]);

  final result = numbers.lookup(2);

  print(result); // 2
}

containsメソッドが要素の存在確認に使用するのに対し、lookupメソッドは一致した要素そのものを取得するために使用します。

一致する要素がない場合はnullになります。

final numbers = HashSet<int>.from([1, 2, 3]);

final result = numbers.lookup(10);

print(result); // null

目次へ

3. lookupメソッドの基本的な使い方

文字列を格納したHashSetから、指定した文字列と同値の要素を取得できます。

import 'dart:collection';

void main() {
  final words = HashSet<String>.from([
    'Dart',
    'Swift',
    'C#',
  ]);

  final result = words.lookup('Swift');

  print(result); // Swift
}

戻り値の型はHashSetの要素型の nullable 型です。
そのため、結果を利用する前にnullかどうかを確認できます。

final words = HashSet<String>.from(['Dart', 'Swift']);
final result = words.lookup('Kotlin');

if (result != null) {
  print('見つかった要素: $result');
} else {
  print('要素は見つかりませんでした');
}

目次へ

4. 同値な要素と同一のオブジェクトの違い

lookupメソッドは、指定したオブジェクトそのものを返すとは限りません。
==演算子とhashCodeによって同値と判定された、HashSet内に格納されている要素を返します。

独自クラスでlookupを使用する場合は、==hashCodeを適切にオーバーライドする必要があります。

import 'dart:collection';

class User {
  final int id;
  final String name;

  User(this.id, this.name);

  @override
  bool operator ==(Object other) =>
      other is User && other.id == id;

  @override
  int get hashCode => id.hashCode;
}

void main() {
  final users = HashSet<User>()..add(User(1, '太郎'));

  final result = users.lookup(User(1, '別の名前'));

  print(result?.name); // 太郎
}

この例では、idが同じユーザーを同値として扱っているため、HashSetに格納済みのUserを取得できます。

目次へ

5. lookupメソッドを使用する場合の注意点

一致しない場合はnullが返る

lookupメソッドは、一致する要素がない場合にnullを返します。
戻り値をnull非許容型の変数へ代入する場合は、存在を確認するか、??で初期値を指定してください。

final numbers = HashSet<int>.from([1, 2, 3]);
final result = numbers.lookup(10) ?? 0;

print(result); // 0

containsとの使い分け

存在するかどうかだけを確認する場合はcontains、HashSetに格納されている一致要素を取得したい場合はlookupを使用します。

HashSetの要素の順序は関係しない

lookupは要素の順序や位置ではなく、等価性によって要素を検索します。
HashSetは要素の順序を保証しないため、順番を指定して取得する用途には適していません。

検索によってHashSetは変更されない

lookupメソッドは検索結果を返すだけで、HashSetへの要素の追加や削除は行いません。

リファレンス

Dart

DartPad

HashSet

Set

Set.lookup

目次へ

6. おわりに

DartHashSetから、指定した値と同値の要素を取得するには、lookupメソッドを使用します。

final result = numbers.lookup(2);

一致する要素が存在する場合はHashSetに格納されている要素が返され、存在しない場合はnullが返されます。
存在確認だけならcontains、一致した要素を取得したい場合はlookupというように使い分けると便利です。

独自クラスで使用する場合は、==hashCodeを正しく実装して、同値性を定義してください。

目次へ


私が技術者として所属している ニューラル では、 組み込み・制御系ソフトウェアを中心に、モバイルアプリや業務アプリなど、さまざまなソフトウェアの開発を行っています。

組み込み分野では、リアルタイム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

目次へ