haskell元组列表,具有独特的元组

mat*_*ieu 1 haskell tuples list-comprehension list

我来自Python和Java背景,所以Haskell对我来说是完全不同的.我正在尝试一些小活动来学习,但我坚持这个.

我有一个有序的元组列表,[(name,studentNumber)],我想过滤这个列表,这样每个学生和每个s​​tudentNumber只出现一次.由于元组是有序的,我想保留名称或studentNumber的第一个实例,并删除可能出现的任何其他实例.

我尝试做一个列表comphrenshion,但我不知道如何检查名称或号码是否已添加到列表中.

ben*_*n w 5

听起来好像你想要(作为第一个,低效的近似)这样的事情:

import Data.List (nubBy)
import Data.Function (on)

filt = nubBy ((==) `on` snd) . nubBy ((==) `on` fst)
Run Code Online (Sandbox Code Playgroud)

第一次调用nubBy将导致一个列表,其中每个名称只出现一次,然后将传递给第二个,从而产生一个列表,其中每个数字只出现一次.

只需使用nub将产生一个列表,其中每(name,number)对只出现一次; 可能仍然会重复使用不同名称的不同数字和数字的名称.

(当然,使用累加器定制的东西会更快.)