プログラムを書こう!

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

DartのHashSetから要素を削除する

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

目次

  1. はじめに
  2. DartのHashSetから要素を削除する
  3. removeメソッドの基本的な使い方
  4. 削除結果を戻り値で確認する
  5. 存在しない要素を指定した場合
  6. removeメソッドを使用する場合の注意点
  7. おわりに

1. はじめに

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

今回はDartHashSetで利用できるremoveメソッドについてです。

removeメソッドを使用すると、HashSetから指定した要素を削除できます。

目次へ

2. DartのHashSetから要素を削除する

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

形式は以下になります。

bool remove(Object? value)

引数に削除したい要素を指定すると、その要素がHashSetに存在する場合は削除されます。

import 'dart:collection';

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

  numbers.remove(3);

  print(numbers); // {1, 2, 4}
}

removeメソッドはHashSet自体を変更するメソッドです。削除後のHashSetを戻り値として返すのではなく、削除できたかどうかをboolで返します。

目次へ

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

removeメソッドの引数には、削除したい要素を指定します。

import 'dart:collection';

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

  languages.remove('Swift');

  for (final language in languages) {
    print(language);
  }
}

指定したSwiftがHashSetから削除されるため、以降の反復処理ではSwiftが処理対象になりません。

目次へ

4. 削除結果を戻り値で確認する

removeメソッドは、要素を削除できた場合にtrue、指定した要素が存在しなかった場合にfalseを返します。

import 'dart:collection';

void main() {
  final numbers = HashSet<int>.from([10, 20, 30]);

  final removed = numbers.remove(20);

  print(removed); // true
  print(numbers); // {10, 30}
}

戻り値を利用すると、削除処理が実際に行われたかどうかを確認できます。

if (numbers.remove(100)) {
  print('要素を削除しました');
} else {
  print('指定した要素は存在しません');
}

目次へ

5. 存在しない要素を指定した場合

HashSetに存在しない要素を指定しても、removeメソッドは例外を発生させません。
HashSetの内容は変更されず、戻り値としてfalseが返されます。

import 'dart:collection';

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

  final removed = numbers.remove(4);

  print(removed); // false
  print(numbers); // {1, 2, 3}
}

削除対象がないことを通常の処理として扱えるため、削除前にcontainsメソッドで存在確認を行わなくても削除できます。

目次へ

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

HashSet自体が変更される

removeメソッドは新しいHashSetを返すのではなく、呼び出したHashSetから要素を削除します。
元のHashSetを残したい場合は、コピーを作成してから削除してください。

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

copied.remove(2);

print(original); // {1, 2, 3}
print(copied); // {1, 3}

重複した要素は管理されない

HashSetには同じ要素を複数登録できません。そのため、同値の要素が複数削除されることはなく、removeメソッド1回の呼び出しで該当する要素が削除されます。

要素の順序に依存しない

HashSetは要素の順序を保証しません。
removeメソッドは指定した値と一致する要素を削除するため、要素の位置を指定することはできません。

反復処理中の変更に注意する

HashSetをforEachfor-inで反復している途中に要素を削除すると、反復処理に影響する場合があります。
必要な要素を別のコレクションに取り出してから削除するなど、処理方法を検討してください。

リファレンス

Dart

DartPad

HashSet

Set.remove

目次へ

7. おわりに

DartHashSetremoveメソッドを使用すると、指定した要素をHashSetから削除できます。

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

print(removed); // true
print(numbers); // {1, 3}

指定した要素が存在しない場合はfalseが返され、HashSetは変更されません。
戻り値を確認することで、削除できたかどうかを判断できます。

目次へ


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

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

目次へ