DartにおけるMap (hash)の書き方のまとめ
備忘録がてら、DartのMap (hash) の使い方についてまとめていく。
main.dart
というファイルを作り、dart run main.dart
で実行しよう。
初期化
var
を使うのが一番簡単。
// main.dart
void main() {
var oreore = {"sando": 1, "foo": "bar"};
print(oreore);
}
型を厳密にしたい場合はこんな感じ。
void main() {
Map<String, Int> oreore = {"sando": 1, "foo": 5};
print(oreore);
}
forEach, keys, values
他言語と同様、DartでもforEach
やkeys
, values
が使える。
void main() {
var oreore = {"sando": 1, "foo": 5};
oreore.forEach((key, val) {
print("$key : $val");
})
// Iterableで取得
for (var name in oreore.keys) {
print('名前: $name');
}
// Iterableで取得
for (var score in oreore.values) {
print('点数: $score');
}
// このやり方もある。
for (var entry in oreore.entries) {
print('${entry.key}: ${entry.value}点');
}
}
追加
他の言語とほぼ同じ。まとめて追加はaddAll
メソッドを使う。
void main() {
var oreore = {"sando": 1, "foo": 5};
// シンプルな方法
oreore["bar"] = 50;
// まとめてならこれ
oreore.addAll({"tanaka": 29, "sato": 50});
print(oreore);
}
削除
remove
メソッドを使う。
void main() {
var oreore = {"sando": 1, "foo": 5};
// シンプルな方法
oreore.remove("sando");
// 全部削除したい場合
oreore.clear();
print(oreore);
}
keyの存在チェック
containsKey
メソッドを使う。あくまでも、containsKey
はキーが存在するかだけをチェックするものであり、
そのキーの値がnullかどうかまでは調べない。
void main() {
var oreore = {"sando": 1, "foo": 5};
if (oreore.containsKey("sando")) {
print(oreore["sando"]);
}
}
マージ
既存のMapをマージしたい場合はaddAll
を使う。
新しくMapを作りたい場合は、スプレット演算子 ...
を使うと良い。
void main() {
// 元のMap
Map<String, int> map1 = {'a': 1, 'b': 2};
Map<String, int> map2 = {'b': 20, 'c': 3};
print('map1: $map1');
print('map2: $map2');
// スプレッド演算子
Map<String, int> merged1 = {...map1, ...map2};
print('結果: $merged1'); // {a: 1, b: 20, c: 3}
// addAll
Map<String, int> merged2 = Map.from(map1);
merged2.addAll(map2);
print('結果: $merged2'); // {a: 1, b: 2, c: 3}
}