【问题标题】:2 same content arrays are not equal in Dart?Dart中2个相同的内容数组不相等?
【发布时间】:2014-11-07 11:45:05
【问题描述】:

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

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

if (arr1 == arr2) {
  print("equal");
} else {
  print("not equal");
}

// 输出:不相等。

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

【问题讨论】:

标签: dart


【解决方案1】:

arr1arr2List 类型对象的不同实例。默认情况下,不同的实例总是不同的。
当一个类实现自定义== 运算符时,它可以覆盖此行为。默认情况下,某些类具有自定义实现,例如 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");
  }
}

【讨论】:

    猜你喜欢
    • 2014-07-15
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2015-01-03
    • 2021-12-30
    相关资源
    最近更新 更多