okaryo.log

Dart/FlutterにおけるMapの等値比較 | okaryo.log

Dart/FlutterにおけるMapの等値比較

    #Dart#Flutter

結論!

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

binarySearchshuffleが使えるぞ!

Equality

今回のようなMapや、他にもSetなどの等価性を調べるときに便利な関数があるぞ!

Iterable Zip

よくわからなかった。リストINリストのこと?どんなときに使うのかも想像できなかった。

Priority Queue

みんな大好き優先度つきキューもここで使うことができる!

Wrappers

コレクションをラップしたクラスらしい?コレクションの一部を上書きしたり拡張したりするのに使う感じだろうか?

一旦おわり

Mapの等値比較を調べていたら、package:collectionという便利なパッケージを見つけた。

しかし、そこは奥が深そうなジャングルの入り口だった。ここの理解を深められるとDartのさらに先へ進める気がするので時間をとって取り組んでみようと思う。

とりあえず今回はここまで。


関連記事
最新記事
プロモーション

This site uses Google Analytics.