是否有惯用的方法将功能应用于列表中的所有项目?
例如,在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.map
的map
函数:
// 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
。但是,在这种情况下,我个人更喜欢显式循环:break
或continue
来控制迭代。 .forEach
每次迭代都涉及一个额外的函数调用,以调用提供的回调。 关于dart - 如何在列表中的所有项目上调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63388906/