Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 根据字段子集的列表中的唯一元素_List_Haskell_Duplicates_Unique - Fatal编程技术网

List 根据字段子集的列表中的唯一元素

List 根据字段子集的列表中的唯一元素,list,haskell,duplicates,unique,List,Haskell,Duplicates,Unique,有这样的记录吗 data Foo=Foo{fooName::Text,fooAge::Int,fooCity::Text} 有了这些元素的列表,在这个假设的removeDupBy函数的模型上,是否有一个函数只删除字段子集上的重复项 foos= [ Foo“john”32“伦敦”, Foo“joe”18“纽约”, Foo“john”22“巴黎”, 富“约翰”32“马德里”, Foo“joe”17“洛杉矶”, Foo“joe”18“Berlin” ] >removeDupBy(\(Foo f)->

有这样的记录吗

data Foo=Foo{fooName::Text,fooAge::Int,fooCity::Text}
有了这些元素的列表,在这个假设的
removeDupBy
函数的模型上,是否有一个函数只删除字段子集上的重复项

foos=
[
Foo“john”32“伦敦”,
Foo“joe”18“纽约”,
Foo“john”22“巴黎”,
富“约翰”32“马德里”,
Foo“joe”17“洛杉矶”,
Foo“joe”18“Berlin”
]
>removeDupBy(\(Foo f)->(Foo名称,fooAge))foos
[
Foo“john”32“伦敦”,
Foo“joe”18“纽约”,
Foo“john”22“巴黎”,
Foo“joe”17“洛杉矶”
]
我可以实现我自己的,但更喜欢使用一个来自成熟库的库,它可能会更高性能,并且对边缘情况更具弹性。我正在考虑使用
nub
,但我不确定如何将实际的
Foo
元素映射到
nub
将过滤掉的元组
(fooName,fooAge)

您可以使用:


(输出格式化以增强可读性)

由于您只处理字符串和数字,因此可以使用
Ord
实例有效地删除重复项,甚至可以使用
哈希表
,这样可以实现几乎恒定的时间查找

与所需签名完全匹配的一些功能包括:

  • 从包装上
  • 从包装上
  • 您可以通过搜索找到其他选项


    如果您需要执行许多这样的操作,您可能更喜欢直接使用
    Map
    HashMap

    from。刚刚发现的关于此算法的值是O(n^2),但也可以是O(n log n)如果使用了
    Ord
    Hashable
    实例。@4castle您会将
    Ord
    /
    Hashable
    nubBy
    一起使用,还是需要使用
    nubOrdOn
    ?Jivan它必须具有不同的功能,如
    nubOrdOn
    ,或者您可以使用
    映射
    //HashMap(插入全部,然后读取值)
    nubOrdOn
    的工作方式就像一个符咒
    Prelude Data.List> nubBy (\x y -> (fooName x, fooAge x) == (fooName y, fooAge y)) foos
    [Foo {fooName = "john", fooAge = 32, fooCity = "London"},
     Foo {fooName = "joe", fooAge = 18, fooCity = "New York"},
     Foo {fooName = "john", fooAge = 22, fooCity = "Paris"},
     Foo {fooName = "joe", fooAge = 17, fooCity = "Los Angeles"}]
    
    Data.Containers.ListUtils> nubOrdOn (\f -> (fooName f, fooAge f)) foos
    
    Witherable> hashNubOn (\f -> (fooName f, fooAge f)) foos