gpt4 book ai didi

具有优化访问方法的 Haskell 数据结构

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

我想创建数据类型来访问和修改一个简单的音乐库,其中包含由轨道组成的专辑。对于一个基本的想法,请考虑以下几点:

data MusicCollection = MC { albums :: Seq Album }
data Album = Album { albumTitle :: String, tracks :: Seq Track }
data Track = Track { trackTitle :: String, tempo :: Tempo }

data Tempo = Unknown | BPM Int

除了节奏,可能还有其他属性,如风格或评分。

上述解决方案使我可以快速访问随机专辑。此外,我希望以比指定速度更快的速度快速访问所有轨道。再一次,快速随机访问返回的轨道会很好:
fasterThan :: Int -> MusicCollection -> SomeRandomAccessCollection Track

更新集合中的轨道也不应该太慢。

问题:

不知道加个 Map Tempo (Seq Track) MusicCollection 是最好的,或者如果有可能以某种方式模仿关系数据库。也许有完全不同的解决方案?

我目前不想使用数据库,但是知道何时在桌面应用程序中使用它们的标准会很有趣。

最佳答案

如果您不想使用数据库,则几乎必须创建 Map正如您自己描述的那样,对于您希望快速访问的每个关系。

请注意 Data.Map.Mapcontainers包使用有序键,因此您可以使用 Data.Map.split获得相当快的 map 分区,这对于查找“比指定速度更快的轨道”很有用(前提是您为 Ord 导出 Tempo)。因此,如果您不需要关系的有序键,您应该使用 Data.HashMap.HashMap来自 unordered-containers相反,它的实现速度更快。

也可以使用没有额外依赖关系的内存关系数据库。例如,您可以使用 persistent和 Sqlite 作为后端。 persistent tutorial 中描述了如何执行此操作。 .

关于具有优化访问方法的 Haskell 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8580843/

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