总结scala中数字列表的转换

时间:2011-10-11 17:09:26

标签: scala

我经常需要对Scala中的数字列表进行转换。当然,一种方法是:

list.map(transform(_)).sum

但是,这不会在不需要创建内存时创建内存。另一种方法是折叠列表。

list.foldLeft(0.0) { (total, x) => total + f(x) }

我发现第一个表达式比第二个表达式更容易编写。有没有一种我可以使用的方法,它具有第一种方便性和第二方的效率?或者我最好编写自己的隐式方法?

list.mapSum(transform(_))

2 个答案:

答案 0 :(得分:12)

您可以使用视图使变换器方法(map,filter ...)变得懒惰。有关详细信息,请参阅here

因此,例如,在您使用名为transform的方法的情况下,您将编写

list.view.map(transform).sum

(请注意,您可以选择省略(_)

答案 1 :(得分:5)

此操作称为foldMap,您可以在Scalaz中找到它。

list foldMap transform