Scala 的 groupBy 标识如何工作?

2024-01-07

我浏览了一下,发现了一个关于分组的问题String通过它的字符,例如:

输入:

"aaabbbccccdd"

将产生以下输出:

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

我发现了这个建议:

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

和这个identity伙计让我很好奇。我发现它是定义在PreDef http://www.scala-lang.org/api/current/index.html#scala.Predef%24像这样:

identity[A](x: A): A

所以基本上它会返回给定的任何内容,对吗?但这如何应用于调用groupBy?

如果这是一个基本问题,我很抱歉,只是函数式编程仍然有点困扰我的大脑。如果我可以提供任何信息以使这个问题更清楚,请告诉我


这是你的表情:

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

让我们逐项讨论。第一个是 groupBy,它将使用鉴别器函数传递的键列表对您的字符串进行分区,在您的情况下是身份。鉴别器函数将应用于屏幕中的每个字符,并且返回相同结果的所有字符将被分组在一起。如果我们想将字母 a 与其余字母分开,我们可以使用x => x == 'a'作为我们的判别器函数。这会将您的字符串字符分组到映射中该函数的返回值(true 或 false)中:

 Map(false -> bbbccccdd, true -> aaa)

通过使用identity,这是一种“好”的说法x => x,我们得到一个地图,其中每个字符在地图中分开,在您的情况下:

Map(c -> cccc, a -> aaa, d -> dd, b -> bbb)

然后我们将映射转换为元组列表(char,String) with toList.

按字符排序sortBy并将字符串与map得到你的最终结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 的 groupBy 标识如何工作? 的相关文章

随机推荐