flutter - 集添加重复的项目

标签 flutter dart set

当我将相同的项目添加到集合中时,如果该项目包含列表,它将被复制。

例如:
‍‍‍‍

main() {
  print('equales ${Foo([]) == Foo([])}');

  Set<Foo> set = {};

  set.add(Foo([]));
  print("set.length = ${set.length}");
  set.add(Foo([]));
  print("set.length = ${set.length}");
}

class Foo {
  List<int> ints;
  Foo(this.ints);
  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is Foo &&
          runtimeType == other.runtimeType &&
          listEquals(ints, other.ints);
  @override
  int get hashCode => ints.hashCode;
}

输出:
equales true
set.length = 1
set.length = 2

最佳答案

您的代码是正确的,但是每次您将新的List []传递给Set时都使用不同的哈希码。而不是检查列表的哈希码,而是使用枚举类检查相等性。

main() {
  print('equales ${Foo([]) == Foo([])}');
  print('list -> ${[] == []}');

  Set<Foo> set = {};

  set.add(Foo([], fooType: FooType.HAPPY));
  print("set.length = ${set.length}");

  set.add(Foo([], fooType: FooType.HAPPY));
  print("set.length = ${set.length}"); 

  set.add(Foo([], fooType: FooType.SAD));
  print("set.length = ${set.length}");
}

class Foo {
  List<int> ints;
  FooType fooType;

  Foo(this.ints, {this.fooType});

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is Foo &&
          runtimeType == other.runtimeType &&
          listEquals(ints, other.ints);

  @override
  int get hashCode => fooType.hashCode;
} 

enum FooType { HAPPY, SAD }

输出:
equales true
list -> false
set.length = 1
set.length = 1
set.length = 2

希望它会有用

关于flutter - 集添加重复的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57741917/

相关文章:

Flutter 闪屏视频播放器

android - 如果我的函数调用异步函数,是否会迫使我让我的函数返回 Future?

Java Set 保留顺序?

python - 当顺序无关紧要时,删除列表列表中的任何重复项(例如,[1,2,3] 和 [1,3,2] 是重复集)?

flutter - 'Future<dynamic>' Flutter的实例

android-studio - 升级后无法在android studio上打开flutter项目

firebase - Flutter:Firebase 存储在 Release模式下不上传文件

flutter - 如何在 Flutter 中的图像上添加水印文本?

dart - 正确使用 Dart 变压器

c++ - 如何重载 operator< 以将对象放入集合中