元素读取
示例:元素遍历
Iterable<int> iterable = [1, 2, 3];
for (final e in iterable) {
print(e);
}
示例:访问第一个和最后一个元素
Iterable<int> iterable = [1, 2, 3];
print('${iterable.first} ${iterable.last}');
示例:使用firstWhere()
firstWhere()
查找第一个满足特定条件的元素。此方法要求您传递一个谓词,该谓词是一个如果输入满足特定条件则返回 true 的函数。
Iterable<int> iterable = [1, 2, 3];
final p = iterable.firstWhere((element) => element == 2);
print(p);
条件检查
该类Iterable提供了两种可用于验证条件的方法:
any():如果至少有一个元素满足条件,则返回 true
every():如果所有元素都满足条件,则返回 true。
示例:使用any()和every()
void main() {
const items = ['Salad', 'Popcorn', 'Toast'];
if (items.any((item) => item.contains('a'))) {
print('At least one item contains "a"');
}
if (items.every((item) => item.length >= 5)) {
print('All items have length >= 5');
}
}
过滤
- firstWhere(): 查找第一个满足条件的元素
- singleWhere(): 查找唯一个满足条件的元素,如果不存在或者存在多个满足条件的元素,直接抛出StateError异常
- where(): 查找满足条件的所有元素
- takeWhile(): 返回满足条件之前的所有元素
- skipWhile(): 跳过满足条件之前的所有元素
void main() {
const numbers = [1, 3, -2, 0, 4, 5];
var numbersUntilZero = numbers.takeWhile((number) => number != 0);
print('Numbers until 0: $numbersUntilZero');
// 输出: Numbers until 0: (1, 3, -2)
var numbersStartingAtZero = numbers.skipWhile((number) => number != 0);
print('Numbers starting at 0: $numbersStartingAtZero');
// 输出:Numbers starting at 0: (0, 4, 5)
}
映射
map()函数可以用于改变迭代里面的每个函数,例如返回每个元素乘以10的列表
Iterable<int> output = numbers.map((number) => number * 10);
另外一个例子,把迭代元素类型从int转换为String,也可以转换为其它自定义类型
Iterable<int> iterable = [1, 2, 3];
final itString = iterable.map((e) => e.toString());
print(itString);