Haskell groupBy没有达到我的预期,我在寻找什么? isPermutation::(Ord a)=>[a]->[a]->Bool ispermutate x y=排序x==排序y isPermutation“123”312“->True isPermutation“123”111“->False groupBy isPermutation[“123”、“3”、“321”]->[“123”、“3”、“321”][“123”、“321”],“3”]

Haskell groupBy没有达到我的预期,我在寻找什么? isPermutation::(Ord a)=>[a]->[a]->Bool ispermutate x y=排序x==排序y isPermutation“123”312“->True isPermutation“123”111“->False groupBy isPermutation[“123”、“3”、“321”]->[“123”、“3”、“321”][“123”、“321”],“3”],haskell,grouping,Haskell,Grouping,groupBy仅对共享相同属性的连续元素进行分组,例如 isPermutation :: (Ord a) => [a] -> [a] -> Bool isPermutation x y = sort x == sort y isPermutation "123" "312" -> True isPermutation "123" "111" -> False groupBy isPermutation ["123","3","321"] -> ["123"

groupBy
仅对共享相同属性的连续元素进行分组,例如

isPermutation :: (Ord a) => [a] -> [a] -> Bool
isPermutation x y = sort x == sort y

isPermutation "123" "312" -> True
isPermutation "123" "111" -> False

groupBy isPermutation ["123","3","321"] -> ["123","3","321"] <- What I get

groupBy isPermutation ["123","3","321"] -> [["123","321"],"3"] <- What I would want
要对所有元素进行分组,首先需要对列表进行排序

> groupBy (==) [1,2,1,1,2]
[[1],[2],[1,1],[2]]

比较
是从
Data.Ord
导入的)

您需要的是一个多路分区。利用:

Prelude Data.List Data.Map>Data.List.Map(reverse.snd)$toList$
foldl(\mp s->insertWith(++)(sort s)[s]mp)空[“123”、“3”、“321”]
[["123","321"],["3"]]
这样每个元素只排序一次


相反,在排序解决方案中使用这个习惯用法。

我认为您必须在这个模型中使用
isPermutation“123”“321”->True
才能得到正确的结果,就像Haskell中的所有方法一样简单。谢谢
> groupBy isPermutation . sortBy (comparing sort) $ ["123","3","321"]
[["123","321"],["3"]]