Dart 中两个相同内容的数组不相等?

use*_*121 4 dart

我有个问题。使用 Dart 时,我无法检查 2 个数组是否相等。(在其他语言中,我可以使用 == 来实现)事实上,我可以使用 String 或 number 来实现 == 。

List arr1 = [1,2,3];
List arr2 = [1,2,3];

if (arr1 == arr2) {
  print("equal");
} else {
  print("not equal");
}
Run Code Online (Sandbox Code Playgroud)

// 输出:不相等。

所以我想知道这有什么意义。我的意思是,如果 == 仅适用于字符串或数字的情况(如果比较的值相同),我们该怎么办。如果我想检查列表、映射等的比较(相等),我该怎么做。它只适用于字符串和数字。

Gün*_*uer 6

arr1arr2是类型对象的不同实例List。默认情况下,不同的实例总是不同的。
当类实现自定义==运算符时,它可以覆盖此行为。有些类默认有自定义实现,例如intString
对于不可变对象可以轻松完成此操作,但对于可变对象则不然。原因之一是,通常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");
  }
}
Run Code Online (Sandbox Code Playgroud)