Scala实现了Haskell的groupBy
发布时间:2020-12-16 18:51:38 所属栏目:安全 来源:网络整理
导读:我正在寻找 Haskell的groupBy的 Scala实现. 行为应该是这样的: isD :: Char - BoolisD c = elem c "123456789-_ "groupBy (a b - isD a == isD b) "this is a line with 0123344334343434343434-343 3345"["this"," ","is","a","line","with"," 0123344334
我正在寻找
Haskell的groupBy的
Scala实现.
行为应该是这样的: isD :: Char -> Bool isD c = elem c "123456789-_ " groupBy (a b -> isD a == isD b) "this is a line with 0123344334343434343434-343 3345" ["this"," ","is","a","line","with"," 0123344334343434343434-343 3345"] 我尝试了Scala groupBy函数,但它只需要一个参数的函数,而不是Haskell的2.我也查看了分区,但它只返回一个元组. 我正在寻找的函数应该对每个与谓词匹配的连续元素进行分组. 解决方法
像这样的问题似乎经常出现,这是一个很好的迹象IMO,Rex Kerr的分组应用方法应该包含在标准集合库中.但是,如果您不想将其复制/粘贴到项目中…
我喜欢你的递归解决方案,但它实际上并没有输出正确的东西(即字符串),所以这是我改变它的方式: def groupBy(s: String)(f: (Char,Char) => Boolean): List[String] = s match { case "" => Nil case x => val (same,rest) = x span (i => f(x.head,i)) same :: groupBy(rest)(f) } 然后,使用您的函数并在REPL中尝试: val isD = (x: Char) => "123456789-_ " contains x groupBy("this is a line with 0123344334343434343434-343 3345")(isD(_) == isD(_)) 结果是List [String],大概是你真正想要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |