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 将不会评估匿名函数。
- 这是一种性能优化技术,可确保仅在需要时计算所有结果项。