list - Dart :检查列表列表中的项目

标签 list dart

在添加列表之前,我要检查它是否不存在,因此没有重复的值。这适用于整数列表,但不适用于其他整数列表:

void main() {
  var listasN = List<int>();
  var n1 = 1;
  var n2 = 2;
  var n3 = 1;
  void addN(int n) {
    if (!listasN.contains(n)) {
      listasN.add(n);
    }
  }
  addN(n1);
  addN(n2);
  addN(n3);
  print(listasN);

  var listas = List<List<int>>();
  var lista1 = [1, 2, 3, 4];
  var lista2 = [5, 6, 7, 8];
  var lista3 = [1, 2, 3, 4];
  void addLista(List<int> ls) {
    if (!listas.contains(ls)) {
      listas.add(ls);
    }
  }
  addLista(lista1);
  addLista(lista2);
  addLista(lista3);
  print(listas);
}

出:
[1, 2]
[[1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4]]

第一个函数不支持重复值,但是第二个函数为什么?

最佳答案

Dart列表没有固有的相等性。也就是说,==运算符仅在列表相同时才认为列表相等,而在内容相同的不同列表时才认为列表相等。
通常,Dart就是这样处理可变类型的相等性。 contains方法使用相等性进行检查。

因此,您可以做的是创建一个“等于列表”方法:

bool listEquals<T>(List<T> list1, List<T> list2) {
  if (list1.length != list2.length) return false;
  for (var i = 0; i < list1.length; i++) {
    if (list1[i] != list2[i]) return false;
  }
  return true;
}

然后,您可以检查列表中是否包含类似的列表:

void addLista(List<int> ls) {
  if (!listas.any((ls2) => listEquals(ls, ls2))) {
    listas.add(ls);
  }
}

关于list - Dart :检查列表列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61984770/

相关文章:

Flutter - Dart - setState 在与异步函数的 Future<> 一起使用时不会重新加载状态

flutter - Dart Flutter 抛出 FlutterError.fromParts(<DiagnosticsNode>[ 错误

FLUTTER:测试 cubit 时,不会发出加载状态,只会发出加载状态

c# - 拆分字符串值并存储在列表中

list - 在OCaml中,为什么列表构造函数::不是运算符

python - 打印列表中至少有一个公共(public)数字的相邻数字

dart - 如何在 Flutter 中使卡片小部件可触摸?

python - 单行不带括号的打印列表

Java - 覆盖列表的键处理

flutter - 命名为 ":"的构造函数