dart - 2 个相同的内容数组在 Dart 中不相等?

标签 dart

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

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

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

//输出:不相等。

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

最佳答案

arr1arr2List 类型对象的不同实例。默认情况下,不同的实例总是不同的。
当类实现自定义 == 运算符时,它可以覆盖此行为。有些类默认有自定义实现,如 intString
对于不可变对象(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/

相关文章:

firebase - Flutter - 可以在没有 firebase 的情况下使用 Google 登录吗?

flutter - 在图像上添加磨砂玻璃效果

dart - Flutter popUntil 抛出Bad state : Future already completed

Dart/polymer 加载屏幕?

php - 在 php 和 dart 之间发送数据

amazon-web-services - 将图像作为 image/jpeg mime/type 从 Flutter 上传到 S3 存储桶

firebase - 如何使用 Flutter 和 Firebase 实时数据库实现邀请系统

types - 如何创建类型别名

flutter - Dart 扩展 - 未为类型 'xxx' 定义方法 'xxx'

string - 如何使用 Flutter TextFormField 在行开头和结尾进行缩进和缩进