#16 Dartで学ぶ辞書型(マップ)の基本

Dartで名前と値の組み合わせを扱うには、`Map`という仕組みを使います。この記事では、Dartにおける辞書の使い方と、Flutterアプリ開発でもよく使う操作をあわせて解説します。

Mapを作ってみる

var scores = {"太郎": 90, "次郎": 85};

型を明示したい場合は、`Map<String, int>`のようにジェネリクスを使って書くこともできます。

Map<String, int> scores2 = {"太郎": 90, "次郎": 85};

値を取り出す・追加する

print(scores["太郎"]); scores["三郎"] = 78;

既に存在するキーに代入すると値が上書きされ、存在しないキーに代入すると新しい要素として追加されます。

キーが存在するか確認する

if (scores.containsKey("三郎")) { print(scores["三郎"]); }

存在しない可能性があるキーへのアクセスは、`scores["四郎"] ?? 0`のように`??`演算子(null合体演算子)を組み合わせて、存在しなければデフォルト値を使う書き方もよく使われます。

キーを削除する

scores.remove("三郎");

指定したキーが存在しない場合でもエラーにはならず、何も起こりません。

全てのキーと値を順に処理する

scores.forEach((name, score) { print("$name: $score"); });

`for`文とentriesを組み合わせて処理することもできます。

for (var entry in scores.entries) { print("${entry.key}: ${entry.value}"); }

Dartならではの注意点

Dartの`Map`から存在しないキーを取り出そうとすると、例外が発生するのではなく`null`が返ります。Dartはnull安全(null safety)という仕組みを持つ言語なので、`Map<String, int>`のような型で取り出した値は本来`int`型のはずですが、キーが存在しない場合は`null`になりうるため、コンパイラは戻り値の型を`int?`(null許容型)として扱います。値を使う前に`containsKey`で確認するか、`??`で既定値を用意するなど、null許容型であることを前提にしたコードを書くようにしましょう。

まとめ

Dartの辞書は`Map`が基本で、`containsKey`や`??`演算子を使って安全にキーを確認します。`remove`での削除、`entries`を使ったループの書き方とあわせて、null安全の考え方も意識しておきましょう。

関連記事


本ページはプロモーションを含みます。

参考書籍(PR)

Dartをもっと学びたい方には「ゼロから学ぶFlutterアプリ開発」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#18 C#で学ぶ日付と時刻の扱いの基本

#11 Rustで学ぶエラーハンドリングの基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本