此问题在此处已有答案:
How to group similar items in a list using Haskell?(5个答案)
5小时前关门了。
请帮我解决这个问题,我已经坐在它很长一段时间。到目前为止,只有这一点发生在我身上,但我不知道如何进一步分组。
实现一个函数nSubstrings::String -〉Int -〉[String]返回一个字符串的n个子字符串的列表。
类似于:
nSubstrings "HASKELLISFUN" 0 = []
nSubstrings "HASKELLISFUN" 1 = ["HASKELLISFUN"]
nSubstrings "HASKELLISFUN" 5 = ["HLU","ALN","SI","KS","EF"]
我试着将它们分组,然后按键排序。例如,nSubstrings“HASKELLISFUN”3
[(“H”,1),(“A”,2),('S',3),(“K”,1),('E ',2),('L ',3),('L ',1),(“I”,2),('S',3),(“F”,1),(“U”,2),('N',3)]我愿意这样看[(“H”,1),(“K”,1),(“L”,1),(“F”,1),(“A”,2),(“E”,2),(“I”,2),(“U”,2),(“S”,3),(“L”,3),(“S”,3),(“N”,3)]为了做到这一点,我写了这段代码
nSubstrings xs n
| n==0 = []
| otherwise = splitOnPairs xs --groupBy (\(x,y) - > y == y) $ splitOnPairs xs
where splitOnPairs xs = [x | let y = [1..n], x<- zip xs $ cycle y ]
也许有人会给予建议或解决办法。2我将非常感激。
1条答案
按热度按时间blpfk2vs1#
你可以用一个**
sortOn :: Ord b => (a -> b) -> [a] -> [a]
来做这个,首先对第二个项目进行排序,然后用groupBy :: (a -> a -> Bool) -> [a] -> [[a]]
**产生与同一组的项目的“突发”,这里我们使用的是二元组中的第二个项目。最后,我们需要对所有项目执行Map,以获得Char
,而不是元组(Char, Int)
:在这里您仍然需要填写
…
部分。