Dart/FlutterにおけるMapの等値比較
結論!
package:collection
を使うと解決できる。
import 'package:collection/collection.dart';
final map1 = {'a': 1, 'b': 2};
final map2 = {'b': 2, 'a': 1};
print(const MapEquality().equals(map1, map2)); // -> true
他にもSet
などの配列関係の等値比較のための関数が用意されている。
Mapの等号演算子==について
ドキュメントを見る感じだと、Object
クラスの==
をそのまま継承しているようだ。
したがって、同一オブジェクトでないと真を返さない。
final map1 = {'a': 1, 'b': 2};
final map2 = {'b': 2, 'a': 1};
final map1_copy = map1;
print(map1 == map2); // -> false
print(map1 == map1_copy); // -> true
そこで便利なのがpackage:collection
のようだ。
package:collectionについて
Contains utility functions and classes in the style of dart:collection to make working with collections easier.
ドキュメントによると、コレクションを簡単に扱うためのパッケージのようだ。
メインの機能としては以下のものがあるらしい。
Algorithms
binarySearch
やshuffle
が使えるぞ!
Equality
今回のようなMapや、他にもSetなどの等価性を調べるときに便利な関数があるぞ!
Iterable Zip
よくわからなかった。リストINリストのこと?どんなときに使うのかも想像できなかった。
Priority Queue
みんな大好き優先度つきキューもここで使うことができる!
Wrappers
コレクションをラップしたクラスらしい?コレクションの一部を上書きしたり拡張したりするのに使う感じだろうか?
一旦おわり
Mapの等値比較を調べていたら、package:collection
という便利なパッケージを見つけた。
しかし、そこは奥が深そうなジャングルの入り口だった。ここの理解を深められるとDartのさらに先へ
進める気がするので時間をとって取り組んでみようと思う。
とりあえず今回はここまで。