📜  Dart - 可迭代集合的高级概念

📅  最后修改于: 2022-05-13 01:55:13.727000             🧑  作者: Mango

Dart - 可迭代集合的高级概念

在本文中,我们将研究Dart与可迭代对象相关的一些重要概念。

1. 使用[ ]运算符索引无效:

在dart,Iterable 中没有运算符[]。为了更好地理解,让我们看一下下面的例子。

例子:

Dart
void main() {
    
  // invalid program
  Iterable iterable = [1, 2, 3, 4, 5 ]; // line 1
int value = iterable[1]; // line 2
}


Dart
void main() {
 Iterable iterable = [1, 2, 3, 4, 5];
 print('Element at 3rd index is ${iterable.elementAt(3)}');
}


Dart
void main() {
  const list = [5,4,3,2,1];
  final value = list.map((number) => number*2);
  print('new values are: ${value}');
}


Dart
void main() {
   const list = [5,4,3,2,1];
    
  final element = [];
  for(var value in list){
    element.add(value * 2);
  }
  print('new values are: ${element}');
}


Dart
void main() {
  
 const list = [5,4,3,2,1];
  
 final value = list.map((number) => number*2);
  
 print('new values are: ${value}');
}


输出:



在这个例子中,我们有一个包含 5 个元素的列表。如果我们想从特定索引中获取数字怎么办?在第 2 行中,我们尝试通过编写iterable[1]从索引中获取数字,但[ ]运算符未在类中定义。如您所见,我们得到了上述错误。

那么问题来了,我们如何从dart的特定索引中获取数字?为此,我们在dart使用elementAt()

句法:

elementAt(index_number)

这里,

  • index_number:要取值的索引。

看看下面的例子。

例子:

这里我们想要获取索引 3 处的值。所以让我们看看如何在elementAt()的帮助下做到这一点

Dart



void main() {
 Iterable iterable = [1, 2, 3, 4, 5];
 print('Element at 3rd index is ${iterable.elementAt(3)}');
}

输出:

说明:所以这里我们传递了索引号 3,因为我们希望将值存储在该索引处。所以我们得到了结果 4。这就是我们如何使用elementAt()获取存储在特定索引处的值

2. 映射可迭代

我们可以映射现有的可迭代对象并导出修改后的值。为此,请执行以下步骤:

  • 拿个收藏
  • 根据条件转换其所有项目。
  • 返回一个新的集合

例子:

Dart

void main() {
  const list = [5,4,3,2,1];
  final value = list.map((number) => number*2);
  print('new values are: ${value}');
}

输出:

是什么让地图运算符在dart非常强大?

能够将流程转换为一段非常短的代码。让我们看一个例子。

如果我们使用 for 循环编写上面的代码,那么我们可以在下面看到,因为它需要多行代码。

Dart



void main() {
   const list = [5,4,3,2,1];
    
  final element = [];
  for(var value in list){
    element.add(value * 2);
  }
  print('new values are: ${element}');
}

输出 :

new values are: [10, 8, 6, 4, 2]

我们看到,虽然输出相同,但代码行数更多。这就是地图强大的原因,因为使用它我们可以用更少的行编写代码并获得所需的结果。

重要的提示:

根据官方文档,地图返回惰性迭代。

懒惰的可迭代是什么意思?

让我们来看看下面的代码:

Dart

void main() {
  
 const list = [5,4,3,2,1];
  
 final value = list.map((number) => number*2);
  
 print('new values are: ${value}');
}

在这里,匿名函数在使用结果之前不会被评估。

这意味着:

  • 这意味着如果结果没有打印出来或者它在任何地方都没有使用, map 将不会评估匿名函数。
  • 这是一种性能优化技术,可确保仅在需要时计算所有结果项。