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

Scala:如何从集合[K]创建地图[K,V],从K到V的函数?

发布时间:2020-12-16 09:17:32 所属栏目:安全 来源:网络整理
导读:从集合[K]创建地图[K,V]和从K到V的功能的最佳方法是什么? 例如,假设我有 scala val s = Set(2,3,5)s: scala.collection.immutable.Set[Int] = Set(2,5) 和 scala def func(i: Int) = "" + i + ifunc: (i: Int)java.lang.String 什么是创建Map [Int,String](
从集合[K]创建地图[K,V]和从K到V的功能的最佳方法是什么?

例如,假设我有

scala> val s = Set(2,3,5)
s: scala.collection.immutable.Set[Int] = Set(2,5)

scala> def func(i: Int) = "" + i + i
func: (i: Int)java.lang.String

什么是创建Map [Int,String](2 – >“22”,3 – > 33“,5→”55“)的最简单方法

解决方法

你可以使用foldLeft:

val func2 = (r: Map[Int,String],i: Int) => r + (i -> func(i))
s.foldLeft(Map.empty[Int,String])(func2)

这将比Jesper的解决方案更好,因为foldLeft在一次通过中构建了Map. Jesper的代码首先创建一个中间数据结构,然后需要将其转换为最终的Map.

更新:我写了一个micro benchmark测试速度的每个答案:

Jesper (original): 35s 738ms
Jesper (improved): 11s 618ms
           dbyrne: 11s 906ms
         Rex Kerr: 12s 206ms
          Eastsun: 11s 988ms

只要您避免构建中间数据结构,就好像它们都是一样的.

(编辑:李大同)

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

    推荐文章
      热点阅读