Haskell 基于元组snd元素的groupBy

Haskell 基于元组snd元素的groupBy,haskell,functional-programming,Haskell,Functional Programming,因此,我想使用groupBy根据snd元素对元组列表进行分组。具有相同snd元素的每个元组都应该在相同的列表中 group :: [(Int,Int)] -> [[(Int,Int)]] group = groupBy (\a b -> snd a == snd b) lijst 列表[1,2,8,9,5,2,9,2,3,9,1,1]的groupBy应返回 [1,2,5,2,9,2],[8,9,3,9],[1,1] 但是它返回[[1,2]、[8,9]、[5,2,9,2]、[3,9

因此,我想使用groupBy根据snd元素对元组列表进行分组。具有相同snd元素的每个元组都应该在相同的列表中

group ::  [(Int,Int)] -> [[(Int,Int)]]
group = groupBy (\a b -> snd a == snd b) lijst
列表[1,2,8,9,5,2,9,2,3,9,1,1]的groupBy应返回 [1,2,5,2,9,2],[8,9,3,9],[1,1]

但是它返回[[1,2]、[8,9]、[5,2,9,2]、[3,9]、[1,1]]


如何使此功能正常工作?

阅读的文档中提到了的文档,其中说明

group函数获取一个列表并返回一个列表列表,以便 结果的串联等于参数

这不是一个很明显的说法:我们只把相等的相邻元素分组


因此,请先列出您的清单。

阅读的文档中,我们指的是的文档,其中说明

group函数获取一个列表并返回一个列表列表,以便 结果的串联等于参数

这不是一个很明显的说法:我们只把相等的相邻元素分组


因此,首先是列表。

按第二个元组排序。请注意,groupBy是一种在线算法,它只对满足谓词的序列进行分组,它不会在遥远的将来查看是否有其他元素最终与相同的snd项一起出现。如果希望得到此结果,则需要对列表进行排序。groupBy只合并相邻的元素。您可以按第二个元组排序。请注意,groupBy是一种在线算法,它只对满足谓词的序列进行分组,它不会在遥远的将来查看是否有其他元素最终与相同的snd项一起出现。如果希望得到此结果,则需要对列表进行排序。groupBy仅合并相邻元素。