我想实现一个排序函数,它将对字符串列表中的元素进行排序,并删除所有重复项。
我已经编写了一个运行良好的函数:
import Data.List(sortBy, sort, groupBy)
cData :: [String]
cData = ["Blue", "Red", "Yellow",
"Blue", "Yellow", "Blue",
"Yellow", "Red", "Blue"]
uniqueColours :: (Ord a) => [a] -> [a]
uniqueColours xs = map head (groupBy (==)(sort xs))
uniqueColours cData = ["Blue","Red","Yellow"]
现在我的问题是。我如何实现相同的功能,而不使用“groupBy”,只使用“sort”和“sortBy”,也会给予相同的输出?这可能吗?这不是效率的问题,我想理解“sortBy”,我似乎没有正确实现。
1条答案
按热度按时间mxg2im7a1#
列表的递归可以让你很容易地考虑列表的前两个元素和尾部。然后你只需要弄清楚在每种情况下该做什么。在空列表或只有一个元素的列表中,答案是显而易见的:该列表已经是“唯一”。
如果列表中至少有两个元素,如果前两个元素相同,你会怎么做?如果它们 * 不 *,你会怎么做?