【问题标题】:data structure for multi-key data?多键数据的数据结构?
【发布时间】:2010-11-06 04:14:43
【问题描述】:

多键数据有常用的数据结构吗?例如(key1, key2, ..., keyN) -> 值。我曾经使用字典的字典(在 c# 中),然后在此基础上编写了自己的包装器,以使语法看起来更好一些。但似乎我仍然需要为每个 N 字典编写一个包装器,其中 N 是键的数量,因为我必须在代码中定义嵌套字典结构。

假设我使用的是 c#,是否有一种数据结构可以更好地封装这种用法,并且可以包含任意数量的具有类似哈希表的查找性能的键?我不能简单地将所有键组合成一个唯一键,因为我需要能够做类似的事情

foreach key2 in data[key1]
    foreach key3 in data[key1][key2]
        foreach key4 in data[key1][key2][key3]

【问题讨论】:

    标签: c# data-structures dictionary hashtable


    【解决方案1】:

    不,不是。

    在不破坏类型安全的情况下,我认为有两种解决方案。

    • 字典的字典 - Dictionary<T1, Dictionary<T2, TRes>>
    • 元组字典 - Dictionary<Tuple3<T1, T2, T3>, Res>。请注意 - 与 F# 不同,您可以编写 Map<T1 * T2 * T3, Res> - C# 没有内置元组类型 - 您必须将其单独实现为泛型类或结构。

    但是对于您的示例代码,锯齿状字典(Dictionaries of Dictionaries)是唯一的选择。

    【讨论】:

    • 在大多数情况下,您的第一个建议似乎远远优于第一个建议。这是我发现自己经常使用的一种方法。如果您只想使用元组,我看不到 3 个键的好处。除了那些好的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多