我有 Python 和 Java 背景,所以 Haskell 对我来说很不一样。我正在尝试一些小的事件来学习,但我坚持这一点。
我有一个有序的元组列表 [(name, studentNumber)],我想过滤这个列表,以便每个学生和每个 studentNumber 只出现一次。由于元组是有序的,我想保留名称或学生编号的第一个实例,并删除可能出现的任何其他实例。
我尝试进行列表综合,但我不确定如何检查名称或号码是否已添加到列表中。
最佳答案
这听起来好像你想要(作为第一个低效的近似值)像这样:
import Data.List (nubBy)
import Data.Function (on)
filt = nubBy ((==) `on` snd) . nubBy ((==) `on` fst)
第一次调用 nubBy
将生成一个列表,其中每个名称只出现一次,然后将其传递给第二个,生成一个列表,其中每个数字只出现一次。
只需使用 nub
就会生成一个列表,其中每个 (name,number)
对只出现一次;可能仍然存在重复的名称与不同的数字和数字与不同的名称。
(当然,使用累加器定制的东西会更快。)
关于list - 元组的haskell列表,具有独特的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8316266/