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

目次
- はじめに
- DartのHashSetから要素を削除する
- removeメソッドの基本的な使い方
- 削除結果を戻り値で確認する
- 存在しない要素を指定した場合
- removeメソッドを使用する場合の注意点
- おわりに
1. はじめに
こんにちは、iOS のエディタアプリPWEditorとその後継PWEditorNextの開発者の二俣です。
2018年5月から毎日技術ブログを更新しています。
今回はDartのHashSetで利用できるremoveメソッドについてです。
removeメソッドを使用すると、HashSetから指定した要素を削除できます。
2. DartのHashSetから要素を削除する
DartのHashSetはSetを実装しているため、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をforEachやfor-inで反復している途中に要素を削除すると、反復処理に影響する場合があります。
必要な要素を別のコレクションに取り出してから削除するなど、処理方法を検討してください。
リファレンス
7. おわりに
DartのHashSetでremoveメソッドを使用すると、指定した要素を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