微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Scala中有一个等同于Python的更通用的地图函数?

我知道 Scala的列表有一个 map的签名(f:(A)=> B)实现:List [B]和一个带有签名的 foreach实现(f:(A)=> Unit):Unit寻找接受多个迭代的东西,与Python map接受多个迭代的方式相同.

我正在寻找具有(f:(A,B)=> C,Iterable [A],Iterable [B])的签名的东西:Iterable [C]或等价物.有没有图书馆存在或类似的方式做类似的?

编辑:

如下所示,我可以做到

val output = myList zip( otherList ) map( x => x(0) + x(1) )

但是在步骤之间创建一个临时列表.如果评论者可以发表我可以upVote他(提示,提示),但有另一种方式吗?

解决方法

在scala 2.8中,有一种叫做Tuple2& Tuple3避免创建临时收集.
以下是一些示例用例:

Welcome to Scala version 2.8.0.r21561-b20100414020114 (Java HotSpot(TM) Client VM,Java 1.6.0_18).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val xs = 0 to 9
xs: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(0,1,2,3,4,5,6,7,8,9)

scala> val ys = List.range(0,10)
ys: List[Int] = List(0,9)

scala> val zs = Array.range(0,10)
zs: Array[Int] = Array(0,9)

scala> (xs,ys).zipped.map{ _+_ }
res1: scala.collection.immutable.IndexedSeq[Int] = Vector(0,10,12,14,16,18)

scala> (zs,ys,xs).zipped.map{ _+_+_ }
res2: Array[Int] = Array(0,9,15,18,21,24,27)

scala>

在Tuple2和Tuple3中都有一个zip方法.
xs.zip(ys)与(xs,ys).zip相同

注意:(xs,ys).zip和(xs,ys)也有一些缺陷.zip压缩,确保xs不能是一个INFINITE流.转到Ticket #2634获取更多信息.
我在几天前在nabble.com上有a post,显示了我对如何修复这张机票的看法.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐