ZetCode

Dart map 函数

最后修改日期:2024 年 1 月 28 日

在本文中,我们将介绍如何在 Dart 语言中将 Iterable 的元素映射到一个函数。在我们的示例中,我们使用列表集合。

map 函数返回一个惰性 Iterable,它通过对 Iterable 的每个元素调用指定的函数来创建。

Dart map 简单示例

下面是一个简单的 map 函数示例。

main.dart
void main() {
  final vals = [1, 2, 3, 4, 5, 6];

  final res = vals.map((e) => e * 5);
  print(res);
  print(res.toList());
}

我们有一个整数列表。我们将 map 函数应用于每个元素。该函数是一个 lambda 表达式,它将元素乘以 5。

$ dart main.dart
(5, 10, 15, 20, 25, 30)
[5, 10, 15, 20, 25, 30]

Dart map 示例 II

在下面的示例中,我们将 map 函数应用于单词列表。

main.dart
void main() {
  final words = ['sky', 'cloud', 'snow', 'summer', 'cup', 'water'];

  final wlns = words.map((e) => e.length);
  print(wlns);
}

在该程序中,我们将单词列表转换为单词长度序列。

$ dart main.dart
(3, 5, 4, 6, 3, 5)

Dart 索引 map 函数

如果我们想处理元素索引,我们可以使用 collection 库中提供的 mapIndexed 函数。

$ dart pub add collection

我们将库添加到项目中。

main.dart
import 'package:collection/collection.dart';

void main() {
  final words = ['sky', 'cloud', 'snow', 'summer', 'cup', 'water'];

  final wlns =
      words.mapIndexed((idx, word) => "{idx=$idx, len=${word.length}}");
  print(wlns);
}

我们将列表元素映射到一个字符串的可迭代对象,其中包含索引值和字符串长度。

$ dart main.dart
({idx=0, len=3}, {idx=1, len=5}, {idx=2, len=4}, ...

Dart map 投影

投影是从返回对象中选择特定字段。

main.dart
class User {
  final String name;
  final String occupation;
  final int salary;

  User(this.name, this.occupation, this.salary);

  @override
  String toString() {
    return "$name|$occupation|$salary";
  }
}

void main() {
  final users = <User>[
    User("John", "Doe", 1230),
    User("Lucy", "Novak", 670),
    User("Ben", "Walter", 2050),
    User("Robin", "Brown", 2300),
    User("Amy", "Doe", 1250),
    User("Joe", "Draker", 1190),
    User("Janet", "Doe", 980),
    User("Albert", "Novak", 1930),
  ];

  final salaries = users.map((e) => e.salary);
  print(salaries);
}

我们有一个包含三个字段的用户列表:名字、姓氏和薪水。我们选择薪水字段来形成一个新的惰性可迭代对象。

$ dart main.dart
(1230, 670, 2050, 2300, 1250, 1190, 980, 1930)

来源

Dart map 方法 - 语言参考

在本文中,我们已经对列表集合的元素调用了 map 函数。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 Dart 教程