首页 > 解决方案 > 如何比较 Dart 中的数组?

问题描述

我正在尝试比较两个数组值的存在,但在迭代器内部,比较every似乎不起作用。

void main() {
  var array1 = [1, 2, 3, 4];
  var array2 = [2, 3, 4, 1];
  print("Arrays are equal: ${compareArrays(array1, array2)}");
}

bool compareArrays(array1, array2) {

  if (array1.length == array2.length) {
    return array1.every( (value) => array2.contains(value) );
  } else {
    return false;
  }

}

所以我得到下面所说的错误:

未捕获的异常:TypeError: Closure 'compareArrays_closure': type '(dynamic) => dynamic' is not a subtype of type '(int) => bool'

我如何通过每个值迭代数组,我在上面做错了什么?

标签: arraysdart

解决方案


问题是 Dart 不能准确推断出什么类型array1array2是什么,所以它不知道函数contains应该是什么。如果您为函数参数指定类型,它将按预期正常工作:

void main() {
  var array1 = [1, 2, 3, 4];
  var array2 = [2, 3, 4, 1];
  print("Arrays are equal: ${compareArrays(array1, array2)}");
}

bool compareArrays(List array1, List array2) {

  if (array1.length == array2.length) {
    return array1.every( (value) => array2.contains(value) );
  } else {
    return false;
  }
}

推荐阅读