1. ホーム
  2. dart

[解決済み] DartでListを等しく比較するにはどうしたらいいですか?

2022-09-25 02:46:28

質問

Dartで2つのリストを比較しているところです。

main() {
    if ([1,2,3] == [1,2,3]) {
        print("Equal");
    } else {
        print("Not equal");
    }   
}

しかし、それらは決して等しくはありません。Dart APIには、ListsやCollectionを比較するためのequal()メソッドがないようです。これを行うための適切な方法はありますか?

どのように解決するのですか?

Gunterの答えを完成させるために:(同一性ではなく)平等のためにリストを比較する推奨される方法は、次のパッケージからEqualityクラスを使用することです。

import 'package:collection/collection.dart';

編集 : 1.13 より前のバージョンでは インポート 'package:collection/equality.dart' です。

Function eq = const ListEquality().equals;
print(eq([1,'two',3], [1,'two',3])); // => true

上記は true というのは、対応するリスト要素である identical() . 他のコレクションを含む可能性のあるリストを(深く)比較したい場合は、代わりに以下を使用します。

Function deepEq = const DeepCollectionEquality().equals;
List list1 = [1, ['a',[]], 3];
List list2 = [1, ['a',[]], 3];
print(    eq(list1, list2)); // => false
print(deepEq(list1, list2)); // => true

他にも様々な方法で組み合わせることができる Equality クラスがあり、例えば Map s. を実行することもできます。 順不同 (深い)比較もできます。

Function unOrdDeepEq = const DeepCollectionEquality.unordered().equals;
List list3 = [3, [[],'a'], 1];
print(unOrdDeepEq(list2, list3)); // => true

詳細は パッケージのAPIドキュメント . 通常、このようなパッケージを使用するには、あなたの pubspec.yaml :

dependencies:
  collection: any