fre*_*low 22 dictionary haskell scala list-comprehension list
计算列表中的所有元素是Haskell中的一个单行:
count xs = toList (fromListWith (+) [(x, 1) | x <- xs])
Run Code Online (Sandbox Code Playgroud)
以下是一个示例用法:
*Main> count "haskell scala"
[(' ',1),('a',3),('c',1),('e',1),('h',1),('k',1),('l',3),('s',2)]
Run Code Online (Sandbox Code Playgroud)
这个函数在Scala中也可以如此优雅地表达吗?
mis*_*tor 38
scala> "haskell scala".groupBy(identity).mapValues(_.size).toSeq
res1: Seq[(Char, Int)] = ArrayBuffer((e,1), (s,2), (a,3), ( ,1), (l,3), (c,1), (h,1), (k,1))
Run Code Online (Sandbox Code Playgroud)
回想一下group
Data.List库,
group :: [a] -> [[a]]
Run Code Online (Sandbox Code Playgroud)
给我们:
map (head &&& length) . group . sort
Run Code Online (Sandbox Code Playgroud)
一个列表友好且相对"天真"的实现.