加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 19:01:19 所属栏目:安全 来源:网络整理
导读:我知道 Scala的列表有一个 map的签名(f:(A)= B)实现:List [B]和一个带有签名的 foreach实现(f:(A)= Unit):Unit寻找接受多个迭代的东西,与Python map接受多个迭代的方式相同. 我正在寻找具有(f:(A,B)= C,Iterable [A],Iterable [B])的签名的东西:Iterab
我知道 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,显示了我对如何修复这张机票的看法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读