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

Scala的groupBy身份如何工作?

发布时间:2020-12-16 21:30:59 所属栏目:安全 来源:网络整理
导读:我正在浏览,发现一个关于将字符串分组为一个字符的问题,例如: 输入: "aaabbbccccdd" 将产生以下输出: "aaa""bbb""cccc""ddd" 我发现这个建议: val str = "aaabbbccccdd"[val list = str.groupBy(identity).toList.sortBy(_._1).map(_._2) 而这个身份证件
我正在浏览,发现一个关于将字符串分组为一个字符的问题,例如:

输入:

"aaabbbccccdd"

将产生以下输出:

"aaa"
"bbb"
"cccc"
"ddd"

我发现这个建议:

val str = "aaabbbccccdd"[
val list = str.groupBy(identity).toList.sortBy(_._1).map(_._2)

而这个身份证件让我好奇.我发现它是在PreDef这样定义:

identity[A](x: A): A

所以基本上它会返回任何给定的,对吗?但是在对groupBy的调用中如何应用?

对不起,如果这是一个基本问题,那就是功能性编程仍然在纠结我的大脑.如果有任何信息可以让这个问题更清楚,请让我知道

解决方法

要理解这只是使用-Xprint调用scala repl:typer选项:

val res2: immutable.Map[Char,String] = augmentString(str).groupBy[Char]({
   ((x: Char) => identity[Char](x))
});

Scalac将一个简单的String转换为StringOps,它是TraversableLike的一个子类,它具有一个groupBy方法:

def groupBy[K](f: A => K): immutable.Map[K,Repr] = {
    val m = mutable.Map.empty[K,Builder[A,Repr]]
    for (elem <- this) {
      val key = f(elem)
      val bldr = m.getOrElseUpdate(key,newBuilder)
      bldr += elem
    }
    val b = immutable.Map.newBuilder[K,Repr]
    for ((k,v) <- m)
      b += ((k,v.result))

    b.result
  }

因此,GroupBy包含一个映射,通过标识函数插入字符.

(编辑:李大同)

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

    推荐文章
      热点阅读