Dart,for循环中使用的int类型必须实现iterable

Dart, the type int used in the for loop must implement iterable

我想在此函数中使用 Dart for…in loop,但即使我将 arr 声明为 Iterable<int>

,我仍然遇到此错误

函数:

void sumOfTwoNumbers(int targetSum, Iterable<int>  arr) {
  for (int i in arr.length-1) {
//stuff
  }
}

虽然它在正常的 for 循环中工作,但我不知道如何解决这个问题,如有任何帮助,我们将不胜感激

因为 arr.length 您正在尝试迭代 int

arr 属于 Iterable 类型,这在语句中是预期的:

for (var T element in Iterable<T>) { /* ... */ }

所以:

void sumOfTwoNumbers(int targetSum, Iterable<int>  arr) {
  for (int i in arr) {
    //stuff
  }
}

忽略最后一个元素

如果你想删除最后一个元素,只需从你的原始列表中创建另一个只包含前 N - 1 个元素的列表,为此你可以使用 take from [=18] =] API:

Note: in this case if your array is empty the length will be zero which results in 0 - 1 -> -1 which throws a RangeError to avoid it you can use max() from dart:math API

void sumOfTwoNumbers(int targetSum, Iterable<int>  arr) {
  // Iterable over all elements except by the last one
  for (int i in arr.take(arr.length - 1)) {
    //stuff
  }
}

通过使用 max():

import 'dart:math';

void sumOfTwoNumbers(int targetSum, Iterable<int>  arr) {
  // Iterable over all elements except by the last one
  for (int i in arr.take(max(arr.length - 1, 0))) {
    //stuff
  }
}

跳过第一个元素

如果你想跳过第一个元素,同样的规则适用,你可以使用 skip API 或者:

void sumOfTwoNumbers(int targetSum, Iterable<int>  arr) {
  // Iterable over all elements except by the first one by skipping it
  for (int i in arr.skip(1)) {
    //stuff
  }
}

参考

看看 Dart codelabs/iterables 它可以帮助您更好地理解集合、列表和可迭代对象在 Dart 中的工作方式。