dart - 如何在列表中的所有项目上调用函数?

标签 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列表中的所有项目上调用函数的等效方法是什么?

最佳答案

如果要将函数应用于List(或Iterable)中的所有项目并收集结果,Dart提供了一个等效于Python的Iterable.mapmap函数:

// Dart
regimentNamesCapitalized_m = regimentNames.map((x) => x.toUpperCase()).toList();
Python还提供列表推导,通常被认为是更Pythonic的,并且通常比函数方法更受青睐:
# Python
regimentNamesCapitalized_m = [x.upper() for x in regimentNames]
Dart等效于Python的列表推导为collection-:
// Dart
regimentNamesCapitalized_m = [for (var x in regimentNames) x.toUpperCase()];
如果您是出于副作用而调用函数,而不关心其返回值,则可以使用Iterable.forEach而不是Iterable.map。但是,在这种情况下,我个人更喜欢显式循环:
  • 我认为它们更常见,因此更具可读性。
  • 它们更加灵活。您可以使用breakcontinue来控制迭代。
  • 它们可能更有效。 .forEach每次迭代都涉及一个额外的函数调用,以调用提供的回调。
  • 关于dart - 如何在列表中的所有项目上调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63388906/

    相关文章:

    flutter - 即使我的文本字段不为空,错误消息也不会出现

    flutter - Flutter软件包URI在软件包的测试中不存在

    android - llvm-rs-cc 缺少 flutter

    flutter - Flutter 支持哪些字体无需外部导入?

    flutter - 在flutter中从24小时格式转换为12小时格式时,添加AM或PM

    flutter - 重写方法以向其添加功能

    firebase - 无法将 Firebase 与我的应用程序集成

    firebase - 我如何在 “then”中获取此变量?

    flutter - 在按下的按钮上推送通知 Flutter

    flutter - 展平 Dart 中列表的动态列表