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

Yas*_*HAY 2 for-loop iterable dart flutter

我想for\xe2\x80\xa6in loop在这个函数中使用 Dart,但即使我将 arr 声明为Iterable<int>

\n

功能:

\n
void sumOfTwoNumbers(int targetSum, Iterable<int>  arr) {\n  for (int i in arr.length-1) {\n//stuff\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

它正在使用正常的 for 循环,但我不知道如何解决这个问题,如有任何帮助,将不胜感激

\n

Ale*_*ntt 5

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

arrIterable是语句中预期的类型:

for (var T element in Iterable<T>) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

所以:

for (var T element in Iterable<T>) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

忽略最后一个元素

如果您想删除最后一个元素,只需从原始列表中创建另一个仅包含第一个元素的列表,您可以从API中N - 1使用:takeIterable

注意:在这种情况下,如果您的数组为空,则长度将为零,这会导致 0 - 1 -> -1 抛出 aRangeError以避免它,您可以max()dart:mathAPI中使用

void sumOfTwoNumbers(int targetSum, Iterable<int>  arr) {
  for (int i in arr) {
    //stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

通过使用max()

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
  }
}
Run Code Online (Sandbox Code Playgroud)

跳过第一个元素

如果您想跳过第一个元素,则适用相同的规则,您可以使用skipAPI:

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
  }
}
Run Code Online (Sandbox Code Playgroud)

参考

查看Dart codelabs/iterables,它可以帮助您更好地了解集合、列表和迭代器在 Dart 中的工作原理。