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でもforEachkeys, 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}
}