在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,显示了我对如何修复这张机票的看法.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...