我浏览了一下,发现了一个关于分组的问题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(使用前将#替换为@)