😳
【flutter】dartのコレクションで比較する際の注意
結論
dart のコレクションを==で比較するのはやめた方がいいです。思わぬバグを生みます。
==で比較せず、listEquals、setEquals、mapEqualsを使用する。
コレクション比較試してみた
list, set, mapで比較してみました。
サンプルコード
import 'package:flutter/foundation.dart';
void main() {
final listA = [1, 2, 3, 4, 5];
final listB = [1, 2, 3, 4, 5];
print('listA == listB ${listA == listB}');
print('listEquals(listA, listB) ${listEquals(listA, listB)}');
final setA = {'A', 'B', 'C'};
final setB = {'A', 'B', 'C'};
print('setA == setB ${setA == setB}');
print('setEquals(setA, setB) ${setEquals(setA, setB)}');
final mapA = {1: 'A', 2: 'B', 3: 'C'};
final mapB = {1: 'A', 2: 'B', 3: 'C'};
print('mapA == mapB ${mapA == mapB}');
print('mapEquals(mapA, mapB) ${mapEquals(mapA, mapB)}');
}
実行結果
flutter: listA == listB false
flutter: listEquals(listA, listB) true
flutter: setA == setB false
flutter: setEquals(setA, setB) true
flutter: mapA == mapB false
flutter: mapEquals(mapA, mapB) true
参考
Discussion