プログラムを書こう!

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

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

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

目次

  1. はじめに
  2. DartのHashSetからすべての要素を削除する
  3. clearメソッドの戻り値
  4. 空のHashSetでclearメソッドを実行した場合
  5. clearメソッドを使用する場合の注意点
  6. おわりに

1. はじめに

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

今回はDartHashSetから、すべての要素を削除するclearメソッドについてです。

目次へ

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

DartHashSetでは、clearメソッドを使用すると、格納されているすべての要素を削除できます。

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

void clear()

例えば、複数の文字列を格納したHashSetから、すべての要素を削除する場合は次のようになります。

実装例

import 'dart:collection';

void main() {
  final set = HashSet<String>();

  set.addAll([
    'Dart',
    'Flutter',
    'Swift',
  ]);

  print(set);
  print(set.length);

  set.clear();

  print(set);
  print(set.length);
}

clearメソッドを実行する前は、setには3つの要素が格納されています。

set.clear();

を実行すると、setに格納されているすべての要素が削除されます。

そのため、

print(set.length);

の結果は、

0

になります。

また、

print(set.isEmpty);

とすれば、

true

となり、HashSetが空になったことを確認できます。

HashSetは要素の順序を保証しないため、clearメソッドを実行する前の要素の表示順は決まっていません。

ただし、clearメソッドでは要素の順序に関係なく、格納されているすべての要素が削除されます。

目次へ

3. clearメソッドの戻り値

clearメソッドの戻り値はvoidです。

そのため、削除した要素や削除した要素数などが戻り値として返されるわけではありません。

例えば、

set.clear();

を実行すると、setの内容が空になりますが、削除した要素を戻り値として取得することはできません。

削除前の要素数を確認したい場合は、clearメソッドを実行する前にlengthプロパティを取得します。

import 'dart:collection';

void main() {
  final set = HashSet<String>();

  set.addAll([
    'Dart',
    'Flutter',
    'Swift',
  ]);

  final count = set.length;

  set.clear();

  print('削除した要素数: $count');
  print('現在の要素数: ${set.length}');
}

実行結果は次のようになります。

削除した要素数: 3
現在の要素数: 0

また、削除前の要素そのものを後から使用したい場合は、clearメソッドを実行する前に別のコレクションへコピーしておく必要があります。

例えば、次のようになります。

final backup = set.toSet();

set.clear();

print(backup);
print(set);

この場合、backupには削除前の要素が残り、setは空になります。

目次へ

4. 空のHashSetでclearメソッドを実行した場合

すでに空になっているHashSetに対してclearメソッドを実行することもできます。

例えば、次のようになります。

import 'dart:collection';

void main() {
  final set = HashSet<String>();

  print(set.isEmpty);

  set.clear();

  print(set.isEmpty);
}

実行結果は次のようになります。

true
true

最初からsetには要素が格納されていないため、clearメソッドを実行しても内容は変わりません。

空のHashSetに対してclearメソッドを実行しても、要素が存在しないことを理由にエラーになることはありません。

そのため、

if (set.isNotEmpty) {
  set.clear();
}

のように、事前に要素が存在するかどうかを確認しなくても、

set.clear();

と実行できます。

目次へ

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

clearメソッドは、特定の要素だけを削除するのではなく、HashSetに格納されているすべての要素を削除します。

例えば、

final set = HashSet<String>();

set.addAll([
  'Dart',
  'Flutter',
  'Swift',
]);

set.clear();

とすると、Dartだけではなく、FlutterSwiftも含めたすべての要素が削除されます。

特定の要素だけを削除したい場合は、removeメソッドを使用します。

set.remove('Flutter');

また、条件に一致する要素だけを削除したい場合は、removeWhereメソッドを使用できます。

例えば、文字列がDから始まる要素だけを削除する場合は次のようになります。

set.removeWhere((value) => value.startsWith('D'));

このように、

set.clear();

はすべての要素を削除したい場合、

set.remove(value);

は指定した要素を削除したい場合、

set.removeWhere((value) => 条件);

は条件に一致する要素を削除したい場合に使用できます。

また、clearメソッドを実行しても、HashSetの変数そのものが使用できなくなるわけではありません。

例えば、

final set = HashSet<String>();

set.add('Dart');

set.clear();

set.add('Flutter');

print(set);

のように、clearメソッドを実行して空にした後でも、再び要素を追加できます。

finalで宣言したHashSetでも同様です。

final set = HashSet<String>();

finalは、変数setへ別のHashSetを再代入できないことを意味します。

そのため、

set.clear();
set.add('Flutter');

のように、setが参照しているHashSetの内容を変更することはできます。

なお、clearメソッドはHashSet固有のメソッドではありません。

Setで定義されているメソッドなので、HashSet以外の変更可能なSetでも利用できます。

リファレンス

Dart

DartPad

HashSet

Set

Set.clear

目次へ

6. おわりに

DartHashSetからすべての要素を削除するには、clearメソッドを使用します。

例えば、

final set = HashSet<String>();

set.addAll([
  'Dart',
  'Flutter',
  'Swift',
]);

set.clear();

とすると、setに格納されていたすべての要素が削除されます。

clearメソッドの戻り値はvoidなので、削除した要素や要素数が返されるわけではありません。

削除前の要素数が必要な場合は、

final count = set.length;
set.clear();

のように、事前にlengthプロパティを取得しておきます。

また、空のHashSetに対してclearメソッドを実行しても問題ありません。

そのため、要素が存在するかどうかを確認せず、

set.clear();

と実行できます。

特定の要素だけを削除したい場合はremoveメソッド、条件に一致する要素を削除したい場合はremoveWhereメソッドを使用します。

clearメソッドを実行した後もHashSetそのものは引き続き使用できるため、

set.clear();
set.add('Dart');

のように、一度すべての要素を削除してから新しい要素を追加することもできます。

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

目次へ