【发布时间】:2015-05-23 20:10:06
【问题描述】:
我正在学习使用 scala 进行函数式编程。一般来说,我注意到 for 循环在函数式程序中的使用并不多,而是使用 map。
问题
在性能、可读性等方面,使用 map 优于 for 循环有哪些优势?
当可以使用循环实现时,引入地图功能的目的是什么?
程序 1:使用 For 循环
val num = 1 to 1000
val another = 1000 to 2000
for ( i <- num )
{
for ( j <- another)
{
println(i,j)
}
}
程序 2:使用地图
val num = 1 to 1000
val another = 1000 to 2000
val mapper = num.map(x => another.map(y => (x,y))).flatten
mapper.map(x=>println(x))
程序 1 和程序 2 做同样的事情。
【问题讨论】:
-
对于您给出的示例(打印输出),您不会使用 map 但会使用 iter。当您将集合元素从类型 A 转换为类型 B 时,您将使用 Map。
-
请注意,Scala 中的
for循环被编译器转换为包括map和flatMap在内的操作——例如,参见this question -
@DNA 所以for循环只是一个语法糖,它会被编译器转换为map和flatMap。
-
语法盐,更多。我想说,向那些努力转型的人致敬。
标签: scala functional-programming