dart - 如何对列表中的所有项目调用函数?
问题描述
是否有一种惯用的方式将函数应用于列表中的所有项目?
例如,在 Python 中,假设我们希望将列表中的所有字符串大写,我们可以使用循环:
regimentNames = ['Night Riflemen', 'Jungle Scouts', 'The Dragoons', 'Midnight Revengence', 'Wily Warriors']
# create a variable for the for loop results
regimentNamesCapitalized_f = []
# for every item in regimentNames
for i in regimentNames:
# capitalize the item and add it to regimentNamesCapitalized_f
regimentNamesCapitalized_f.append(i.upper())
但更简洁的方式是:
capitalizer = lambda x: x.upper()
regimentNamesCapitalized_m = list(map(capitalizer, regimentNames)); regimentNamesCapitalized_m
在 Dart 列表中的所有项目上调用函数的等效方法是什么?
解决方案
如果你想对 a List
(or Iterable
)中的所有项目应用一个函数并收集结果,Dart 提供了一个Iterable.map
相当于 Python 的函数map
:
// Dart
regimentNamesCapitalized_m = regimentNames.map((x) => x.toUpperCase()).toList();
Python 还提供了列表推导,这通常被认为更 Pythonic 并且通常比函数式方法更受欢迎:
# Python
regimentNamesCapitalized_m = [x.upper() for x in regimentNames]
Dart 相当于 Python 的列表推导式是collection-for:
// Dart
regimentNamesCapitalized_m = [for (var x in regimentNames) x.toUpperCase()];
如果你调用一个函数是为了它的副作用并且不关心它的返回值,你可以使用Iterable.forEach
代替Iterable.map
. 但是,在这种情况下,我个人更喜欢显式循环:
- 我认为由于更常见,它们更具可读性。
- 他们更灵活。您可以使用
break
或continue
来控制迭代。 - 他们可能更有效率。
.forEach
每次迭代都涉及一个额外的函数调用来调用提供的回调。
推荐阅读
- php - 在 PHP 不工作的情况下修剪变量中的空间
- r - 如何删除R中文件名括号内的字符?
- python - 想要获取图像的一部分
- mongodb - 当我在命令提示符下运行“mongod”命令时,消息以 json 格式显示。如何解决?
- android - onNavigationItemSelected 未调用
- c++ - 无法在我的 TCP 服务器代码中解决此错误
- r - 如何使用 R 中的“plotly”库在主图旁边添加边际分布图?
- macos - `.zshrc:8: bad assignment` 来自`source ~/.zshrc` 的错误
- api - API 的 URL 参数
- node.js - 如何将搜索半径限制为 url 查询字符串中的矩形区域