如何在Dart中将两个列表相等并包含相同的对象?

Set*_*add 6 dart

我有两个清单:

List fruits = ['apples', 'bananas'];
List foods = ['apples', 'bananas'];
Run Code Online (Sandbox Code Playgroud)

如何比较水果和食物,并确保两个列表具有相同顺序的相同对象?

Pat*_*lin 6

比较列表的相等性(而不是同一性)的推荐方法是使用以下包中的 Equality 类

import 'package:collection/equality.dart';
Run Code Online (Sandbox Code Playgroud)

例如,

Function eq = const ListEquality().equals;
print(eq(fruits, foods)); // => true
Run Code Online (Sandbox Code Playgroud)

这适用于您的情况,因为fruitsfoods包含相应的参数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
Run Code Online (Sandbox Code Playgroud)

还有其他 Equality 类可以通过多种方式组合,包括Maps 的相等性。您甚至可以对集合执行无序(深度)比较:

Function deepEq = const DeepCollectionEquality.unordered().equals;
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅包 API 文档。像往常一样,要使用这样的包,您必须在您的pubspec.yaml:

dependencies:
  collection: any
Run Code Online (Sandbox Code Playgroud)