gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:26:09 25 4
gpt4 key购买 nike

给定一个记录

data Foo = Foo { fooName :: Text, fooAge :: Int, fooCity :: Text }
有了这些元素的列表,在这个假设的模型 removeDupBy 上,是否有一个函数可以只删除字段子集上的重复项?功能?
foos =
[
Foo "john" 32 "London",
Foo "joe" 18 "New York",
Foo "john" 22 "Paris",
Foo "john" 32 "Madrid",
Foo "joe" 17 "Los Angeles",
Foo "joe" 18 "Berlin"
]

> removeDupBy (\(Foo f) -> (fooName, fooAge)) foos
[
Foo "john" 32 "London",
Foo "joe" 18 "New York",
Foo "john" 22 "Paris",
Foo "joe" 17 "Los Angeles"
]
我可以实现我自己的,但更喜欢使用一个完善的库中的一个,这可能会更高效,并且对边缘情况更有弹性。我正在考虑使用 nub但我不确定如何映射实际 Foo元组的元素 (fooName, fooAge)那个 nub会过滤掉。

最佳答案

由于您只处理字符串和数字,您可以使用 Ord有效删除重复项的实例,甚至 Hashable ,这允许几乎恒定时间的查找。
一些与您想要的签名完全匹配的函数是:

  • nubOrdOn 来自 containers包裹
  • Data.Containers.ListUtils> nubOrdOn (\f -> (fooName f, fooAge f)) foos
  • hashNubOn 来自 witherable包裹
  • Witherable> hashNubOn (\f -> (fooName f, fooAge f)) foos
    您可以通过搜索 Hoogle 找到其他选项。为 (a -> b) -> [a] -> [a]
    如果你需要做很多这样的操作,你可能更喜欢使用 MapHashMap直接地。

    关于list - 根据字段子集的列表中的唯一元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67581811/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com