Dart - 何时在集合上使用 Collection-For-In 与 .Map()
Dart - When To Use Collection-For-In vs .Map() on Collections
collection-for-in 操作和 .map() 方法都可以 return 对先前集合中的元素进行一些操作。有什么理由更喜欢使用其中之一吗?
var myList = [1,2,3];
var alteredList1 = [for(int i in myList) i + 2]; //[3,4,5]
var alteredList2 = myList.map((e) => e + 2).toList(); //[3,4,5]
使用更容易和更易读的那个。
这是一个故意含糊的答案,因为这取决于你在做什么。
任何时候你有一些以 .toList()
结尾的东西,我至少会 考虑 把它变成一个列表文字。如果 map
或 where
的主体很简单,您通常可以使用 for
/in
(加上 if
for where
).
然后,有时它会变得复杂,您需要使用同一个变量两次,或者 map
计算使用 while
循环,或者其他不适合列表文字语法的东西。
然后你可以保留辅助函数并执行 [for (var e in something) helperFunction(e)]
或者只执行 something.map((e) { body of helper function }).toList()
。在许多情况下,后者更具可读性。
因此,如果您的可迭代代码以 toList
结尾,请考虑使用列表文字,但如果文字变得过于复杂,请不要因为使用 .map(...).toList()
方法而感到难过。
可读性才是真正重要的。
不是专家,但我个人更喜欢第一种方法。一些原因:
您可以在同一列表中包含其他元素(独立于 for 循环):
var a = [1, 2, 3];
bool include5 = true;
var b = [
1,
for (var i in a) i + 1,
if (include5) 5,
];
print(b); // [1, 2, 3, 4, 5]
有时,当将模型映射到 Widget 列表时,.map().toList()
方法会生成 List<dynamic>
,隐式转换将不起作用。当你遇到这样的错误时,请避免使用第二种方法。
collection-for-in 操作和 .map() 方法都可以 return 对先前集合中的元素进行一些操作。有什么理由更喜欢使用其中之一吗?
var myList = [1,2,3];
var alteredList1 = [for(int i in myList) i + 2]; //[3,4,5]
var alteredList2 = myList.map((e) => e + 2).toList(); //[3,4,5]
使用更容易和更易读的那个。 这是一个故意含糊的答案,因为这取决于你在做什么。
任何时候你有一些以 .toList()
结尾的东西,我至少会 考虑 把它变成一个列表文字。如果 map
或 where
的主体很简单,您通常可以使用 for
/in
(加上 if
for where
).
然后,有时它会变得复杂,您需要使用同一个变量两次,或者 map
计算使用 while
循环,或者其他不适合列表文字语法的东西。
然后你可以保留辅助函数并执行 [for (var e in something) helperFunction(e)]
或者只执行 something.map((e) { body of helper function }).toList()
。在许多情况下,后者更具可读性。
因此,如果您的可迭代代码以 toList
结尾,请考虑使用列表文字,但如果文字变得过于复杂,请不要因为使用 .map(...).toList()
方法而感到难过。
可读性才是真正重要的。
不是专家,但我个人更喜欢第一种方法。一些原因:
您可以在同一列表中包含其他元素(独立于 for 循环):
var a = [1, 2, 3]; bool include5 = true; var b = [ 1, for (var i in a) i + 1, if (include5) 5, ]; print(b); // [1, 2, 3, 4, 5]
有时,当将模型映射到 Widget 列表时,
.map().toList()
方法会生成List<dynamic>
,隐式转换将不起作用。当你遇到这样的错误时,请避免使用第二种方法。