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) 而这个身份证件让我好奇.我发现它是在 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包含一个映射,通过标识函数插入字符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |