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

目次
1. はじめに
こんにちは、iOS のエディタアプリPWEditorとその後継PWEditorNextの開発者の二俣です。
2018年5月から毎日技術ブログを更新しています。
今回はDartのHashSetに含まれる要素を、文字列として連結できるjoinメソッドについてです。
2. DartのHashSetの要素を連結する
DartのHashSetでは、joinメソッドを使用すると、含まれている要素を1つの文字列に連結できます。
joinメソッドの形式は以下になります。
String join([String separator = ""])
引数には、要素と要素の間に挿入する区切り文字を指定します。
引数を省略した場合、区切り文字は空文字列になります。
例えば、次のようなHashSetがあるとします。
import 'dart:collection'; void main() { final words = HashSet<String>(); words.addAll(['Dart', 'Swift', 'C#']); final result = words.join(); print(result); }
実行すると、HashSetの要素が区切り文字なしで連結された文字列が取得されます。
DartSwiftC#
HashSetは要素の順序を保証しないため、表示される順序は実行環境などによって異なる場合があります。
3. joinメソッドの基本的な使い方
要素をカンマ区切りで連結したい場合は、join(', ')のように区切り文字を指定します。
import 'dart:collection'; void main() { final languages = HashSet<String>(); languages.addAll(['Dart', 'Swift', 'C#']); final result = languages.join(', '); print(result); }
実行結果は以下のようになります。
Dart, Swift, C#
joinメソッドの戻り値はStringです。HashSetそのものではなく、要素を連結した新しい文字列が返されます。
数値を格納したHashSetでも使用できます。数値は文字列に変換されてから連結されます。
final numbers = HashSet<int>.from([10, 20, 30]); final result = numbers.join(' / '); print(result); // 10 / 20 / 30
4. 区切り文字を指定して連結する
区切り文字には、カンマや改行、矢印など、任意の文字列を指定できます。
final items = HashSet<String>.from(['りんご', 'みかん', 'ぶどう']); final commaSeparated = items.join(', '); final lineSeparated = items.join('\\n'); final arrowSeparated = items.join(' -> '); print(commaSeparated); print(lineSeparated); print(arrowSeparated);
例えば、lineSeparatedは次のような文字列になります。
りんご みかん ぶどう
画面表示用の一覧、ログ出力、CSVに似た形式の文字列などを作成する場合に利用できます。
ただし、厳密なCSVを作成する場合は、要素内のカンマやダブルクォートなどを考慮する必要があります。
HashSetの要素を並べ替えてから連結したい場合は、いったんtoListでListに変換し、sortを実行します。
final numbers = HashSet<int>.from([30, 10, 20]); final sortedNumbers = numbers.toList()..sort(); final result = sortedNumbers.join(', '); print(result); // 10, 20, 30
5. joinメソッドを使用する場合の注意点
元のHashSetは変更されない
joinメソッドは、HashSetの要素を読み取って文字列を作成するだけです。
メソッドを呼び出しても、元のHashSetの内容は変更されません。
final numbers = HashSet<int>.from([1, 2, 3]); final result = numbers.join('-'); print(numbers); // {1, 2, 3} print(result); // 1-2-3
要素の順序は保証されない
HashSetは要素の順序を保証しません。そのため、joinメソッドで連結した文字列の順序も保証されません。
一定の順序で連結したい場合は、toListでListに変換してから並べ替えてください。
空のHashSetでは空文字列が返される
要素がないHashSetに対してjoinを実行すると、空文字列が返されます。
区切り文字だけが返されることはありません。
final numbers = HashSet<int>(); final result = numbers.join(', '); print(result.isEmpty); // true
null要素は文字列として連結される
HashSet<String?>のようにnullを含むHashSetでは、nullが文字列として扱われます。
final values = HashSet<String?>.from(['Dart', null, 'Swift']); final result = values.join(', '); print(result); // Dart, null, Swift
nullを表示したくない場合は、あらかじめ除外してから連結します。
final values = HashSet<String?>.from(['Dart', null, 'Swift']); final result = values.whereType<String>().join(', '); print(result); // Dart, Swift
joinは文字列を作成するメソッド
joinメソッドは、要素を連結したStringを返します。
連結後の文字列を再びHashSetとして扱えるわけではありません。
要素の追加や削除を行いたい場合は、元のHashSetに対してaddやremoveなどを使用します。
リファレンス
6. おわりに
DartのHashSetに含まれる要素を連結するには、joinメソッドを使用します。
final result = numbers.join(', ');
joinメソッドは、HashSetの各要素を指定した区切り文字で連結し、新しい文字列として返します。
元のHashSetは変更されません。
HashSetは要素の順序を保証しないため、順序が重要な文字列を作成する場合は、Listへ変換して並べ替えてからjoinを実行してください。
また、空のHashSetでは空文字列が返され、null要素はnullという文字列として扱われます。
HashSetの要素を画面表示用の文字列やログなどにまとめたい場合に、joinメソッドを利用できます。
私が技術者として所属している ニューラル では、 組み込み・制御系ソフトウェアを中心に、モバイルアプリや業務アプリなど、さまざまなソフトウェアの開発を行っています。
組み込み分野では、リアルタイム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