我有一个问题。 使用Dart时,我无法检查2个数组是否相等。 (在其他语言中,我可以用==) 事实上,我只能用字符串或数字来做= =。
List arr1 = [1,2,3];
List arr2 = [1,2,3];
if (arr1 == arr2) {
print("equal");
} else {
print("not equal");
}
//输出:不相等。
所以我想知道这是怎么回事。我的意思是,如果==只适用于String或数字的情况(如果比较的值相同),我们该怎么做。 如果我想检查List,Map,...的那种比较(相等),我该怎么办? 它适用于String&号。
答案 0 :(得分:2)
arr1
和arr2
是List
类型对象的不同实例。默认情况下,不同的实例总是不同的
当类实现自定义==
运算符时,它可以覆盖此行为。默认情况下,某些类具有自定义实现,如int
和String
这对于不可变对象很容易实现,但对于可变对象则不容易。一个原因是通常hashCode
是根据类中的值计算的,并且hashCode
不能为实例更改,因为这可能导致存储在地图中的实例不能当密钥的哈希码发生变化时,它将被检索。
作为一种解决方法,有一个库提供辅助函数来比较列表/迭代。
import 'package:collection/equality.dart';
void main(List<String> args) {
if (const IterableEquality().equals([1,2,3],[1,2,3])) {
// if (const SetEquality().equals([1,2,3].toSet(),[1,2,3].toSet())) {
print("Equal");
} else {
print("Not equal");
}
}