我需要代表一个集合,我开始使用Data.Set。我发现没有什么可以做的 - singleton
,union
,intersection
等都在那里。我喜欢。我可以表达“什么”,而不是“如何”。但我内心的C程序员很不舒服。有很多方法可以实现一个集合(二叉树,哈希,布尔数组等)。我真的可以信任Data.Set来选择最好的吗?我能否以某种方式引导它,或者我只是屈服于它(我承认,可能更优秀)的判断?
答案 0 :(得分:20)
Data.Set
没有内心智慧(只看the source!)。它只是一棵平衡的树或有序的元素。您可以浏览具有不同性能特征的许多其他集合和类似结构的hackage。例如,请参阅unordered-containers(HashSet),HashTables和bloomfilter。
答案 1 :(得分:19)
通用Data.Set
使用平衡二叉树。如果你有整数或位向量集,你需要Data.IntSet
,它使用Patricia尝试。
这两种实现都经过了年的竞争,以便通过Haskell获得最佳性能。
投降多萝西!