我有一个问题。 使用 Dart 时,我无法检查 2 个数组是否相等。 (在其他语言中,我可以用==) 事实上,我可以用字符串或数字来做==。
List arr1 = [1,2,3];
List arr2 = [1,2,3];
if (arr1 == arr2) {
print("equal");
} else {
print("not equal");
}
//输出:不相等。
所以我想知道这有什么意义。我的意思是,如果 == 仅适用于字符串或数字的情况(如果比较的值相同),我们该怎么做。 如果我想检查 List、Map、.. 的那种比较(相等),我该怎么办? 它只适用于字符串和数字。
最佳答案
arr1
和 arr2
是 List
类型对象的不同实例。默认情况下,不同的实例总是不同的。
当类实现自定义 ==
运算符时,它可以覆盖此行为。有些类默认有自定义实现,如 int
和 String
。
对于不可变对象(immutable对象)可以很容易地做到这一点,但对于可变对象则不行。一个原因是通常 hashCode
是根据类中存储的值计算的,并且 hashCode
不能为实例更改,因为这可能导致实例存储在当 key 的哈希码更改时,无法再检索 map 。
作为解决方法,有一个库提供了帮助函数来比较列表/可迭代对象。
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");
}
}
关于dart - 2 个相同的内容数组在 Dart 中不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26800510/