プログラムを書こう!

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

DartのHashSetの要素を変換する

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

目次

  1. はじめに
  2. DartのHashSetの要素を変換する
  3. mapメソッドの基本的な使い方
  4. 要素を別の型へ変換する
  5. mapメソッドを使用する場合の注意点
  6. おわりに

1. はじめに

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

今回はDartHashSetの要素を変換できるmapメソッドについてです。

目次へ

2. DartのHashSetの要素を変換する

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

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

Iterable<T> map<T>(T Function(E) f)

HashSetの各要素に関数を適用し、変換後の要素をIterableとして返します。
元のHashSet自体は変更されません。

import 'dart:collection';

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

  final doubled = numbers.map((number) => number * 2);

  print(doubled.toList()); // [2, 4, 6](順序は保証されません)
}

mapメソッドは、HashSetの要素を別の値へ変換したい場合に便利です。
戻り値はIterableなので、必要に応じてtoList()toSet()を呼び出してコレクションへ変換します。

目次へ

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

文字列を格納したHashSetの各要素を、大文字へ変換できます。

import 'dart:collection';

void main() {
  final words = HashSet<String>.from([
    'dart',
    'swift',
    'kotlin',
  ]);

  final upperWords = words.map((word) => word.toUpperCase());

  print(upperWords.toList()); // [DART, SWIFT, KOTLIN]
}

mapに渡す関数は、HashSetの各要素を1つ受け取り、変換後の値を1つ返します。

final numbers = HashSet<int>.from([1, 2, 3]);
final labels = numbers.map((number) => '番号: $number');

for (final label in labels) {
  print(label);
}

変換処理はmapに渡した関数へ記述します。

目次へ

4. 要素を別の型へ変換する

mapメソッドでは、要素の型を変換することもできます。
たとえば、intのHashSetをStringのIterableへ変換できます。

import 'dart:collection';

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

  final strings = numbers.map((number) => number.toString());

  print(strings.toList()); // [10, 20, 30]
}

独自クラスのHashSetから、必要なプロパティだけを取り出すこともできます。

import 'dart:collection';

class User {
  final int id;
  final String name;

  User(this.id, this.name);
}

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

  final names = users.map((user) => user.name);

  print(names.toList()); // [太郎, 花子]
}

目次へ

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

戻り値はIterable

mapメソッドの戻り値はIterableです。Listとして扱いたい場合はtoList()を使用してください。

final numbers = HashSet<int>.from([1, 2, 3]);
final doubled = numbers.map((number) => number * 2).toList();

print(doubled); // [2, 4, 6]

HashSetの順序は保証されない

HashSetは要素の順序を保証しません。
そのため、mapの結果を表示したときの順序も保証されません。順序が必要な場合は、変換後に並べ替えてください。

final numbers = HashSet<int>.from([3, 1, 2]);
final sorted = numbers
    .map((number) => number * 10)
    .toList()
  ..sort();

print(sorted); // [10, 20, 30]

変換後の重複に注意する

mapの戻り値はIterableなので、変換後に同じ値が複数含まれることがあります。
重複を取り除きたい場合は、toSet()を使用します。

final numbers = HashSet<int>.from([1, 2, 3, 4]);
final parity = numbers.map((number) => number.isEven ? '偶数' : '奇数');

print(parity.toList()); // ['奇数', '偶数', '奇数', '偶数']
print(parity.toSet()); // {'奇数', '偶数'}

元のHashSetは変更されない

mapメソッドは変換後のIterableを返すだけで、元のHashSetの要素を変更しません。

リファレンス

Dart

DartPad

HashSet

Set

Iterable.map

目次へ

6. おわりに

DartHashSetの各要素を変換するには、mapメソッドを使用します。

final doubled = numbers.map((number) => number * 2);

mapメソッドは各要素に変換関数を適用し、結果をIterableとして返します。
toList()を使用すればListに、toSet()を使用すればSetに変換できます。

HashSetは要素の順序を保証しないため、結果の順序に依存しないように注意してください。
また、変換後の重複を取り除きたい場合は、toSet()を使用すると便利です。

目次へ


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

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

目次へ