#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿