'Dart, the type int used in the for loop must implement iterable
I want to use Dart for…in loop in this function but I keep facing this error even though I declared the arr as an Iterable<int>
function:
void sumOfTwoNumbers(int targetSum, Iterable<int> arr) {
for (int i in arr.length-1) {
//stuff
}
}
It's working with a normal for loop though, I don't know how can I fix this, for any help that would be appreciated
Solution 1:[1]
Because arr.length you are trying to iterate over a int
arr is of type Iterable which is expected on the statement:
for (var T element in Iterable<T>) { /* ... */ }
So:
void sumOfTwoNumbers(int targetSum, Iterable<int> arr) {
for (int i in arr) {
//stuff
}
}
Ignore the last element
And if you want to remove the last element, just create another list from your original list that takes only the first N - 1 elements, to do that you can use take from Iterable API:
Note: in this case if your array is empty the length will be zero which results in 0 - 1 -> -1 which throws a
RangeErrorto avoid it you can usemax()fromdart:mathAPI
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
}
}
By using 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 the first element
Same rule applies if you want skip the first element, you can use the skip API either:
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
}
}
Reference
Take a look at Dart codelabs/iterables it can help you understand better how collections, lists and iterables works in Dart.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
