Dart 可迭代集合

元素读取

示例:元素遍历

  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);

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Index