gpt4 book ai didi

haskell - 如果我需要具有随机访问的数据结构,Vector 是我唯一的不错选择吗?

转载 作者:行者123 更新时间:2023-12-02 12:11:05 24 4
gpt4 key购买 nike

如果还有其他好的选择,为什么还没有一个具有随机访问所有共同特征的类型类?然后 Vector 和其他随机访问数据结构将具有该类型类的实例。

最佳答案

不,Vector 不是您唯一的“好”选择,具体取决于您所说的“好”的含义。例如,Array 是一种类似的数据结构,但 API 稍微麻烦一些,但它也允许对索引集有更丰富的选择,并且在实现细节方面有所不同,这在某些情况下可能会有所帮助(例如,BoolArray 是位图,而 BoolVector 每个使用一个字节元素)。

此外,如果在末端有很多元素的添加和删除,那么来自 Data.SequenceSeq 类型可能是一个不错的选择(尽管它是随机访问的)粗略地说,性能从末端的 O(1) 到中间的 O(log n) 不等。

很难确切地说为什么没有随机访问 API 的标准库类型类,但请注意,Haskell 在标准库中通常没有这种级别的特殊性的数据结构 API 类型类。例如,基本 MapSet 数据结构 API 也没有标准类型类,尽管这些也适用于各种基于哈希的映射和集合。可用。

可用的标准库类型类通常是更高级别的抽象,例如 FoldableTraversable

但是,lens 包提供了索引类型类抽象的集合,因此例如 VectorIxed 实例数组Seq使得:

v ^? ix 2
如果 v 是上述类型中的任何一种(或者列表或许多其他可索引集合),

将让您Just索引为 2 的元素。使用这些类型类的可能缺点是,您必须接受整个lens生态系统及其语法方法才能有效地使用它们。

作为替代方案,对于特定应用程序,编写特定于应用程序的类型类通常是一种合理的方法,该类型类封装对关键数据结构执行的操作,然后将数据结构实现为这些类型类的实例。这可以实现您想象的通用类型类的许多好处,但比预制类型类和实例更灵活,而无需执行更多工作。

关于haskell - 如果我需要具有随机访问的数据结构,Vector 是我唯一的不错选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789794/

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