【发布时间】:2009-10-23 21:05:36
【问题描述】:
我正在寻找一种高效的索引持久数据结构。我通常在 .NET 中工作,并且知道 FSharp 的 Map,但是该实现和我知道的大多数其他实现只提供了一个“索引”,即映射的左侧。
基本上是这样的场景
public class MyObject
public int Id { get; }
public int GroupId { get; }
public string Name { get; }
其中对象的 ID 将是添加的全局唯一项集。 GroupId 可能有重复的值,我希望能够查询具有匹配 GroupId 的所有值,并且在 GroupId 内名称将是唯一的,但可能在不同的 GroupId 之间重复。这不是我可以简单地创建 3 个字段的复合键的情况,因为我需要根据特定字段值独立访问项目组。
我可以做到这一点,并且在过去使用字典中的字典,这已在 STackoverflow 上的其他帖子中推荐过......但是,我也希望数据结构是 1) 完全持久化和一切意味着 2)内存高效——意味着版本需要共享尽可能多的节点 3) 修改效率高 - 我希望它快
我意识到我在这里要求很多,但我想要求避免即使已经完成了重新发明轮子。
谢谢
【问题讨论】:
-
在 F# 中;它可能是左侧的单个索引,但我相信如果您单独插入它们并在右侧使用相同的数据,每个都应该指向该数据的相同引用。
标签: data-structures functional-programming immutability