【问题标题】:Best collection to store unique path存储独特路径的最佳集合
【发布时间】:2012-05-30 00:39:09
【问题描述】:

我需要存储大量唯一路径,例如:"C:\MyDir\MySubDir\myfile.txt"

我希望能够快速检查我的集合中是否包含路径,以及以上,以尽可能减少内存。

最适合这个任务的collection是什么?

是否可以存储一个表示唯一路径的值,而不是字符串本身,以使用更少的内存?

【问题讨论】:

    标签: .net memory-management collections


    【解决方案1】:

    看看Trie,我们用 2000 万条路径做得非常高效

    【讨论】:

      【解决方案2】:

      正如其他人所回答的那样,TrieHashSet 将提供快速获取时间。
      请注意,虽然Trie 需要的内存少于HashSet,但两者都需要比普通的旧List 更多的内存(请参阅this)。

      我不知道它是否真的是necessary,但如果内存是一个真正的问题,您可以优化Trie 实现,使用文件夹名称作为节点而不是字母(通常文件夹名称比一个字母)。这样,您将使用路径的树结构。

      【讨论】:

      • +1 用于文件夹优化的想法。它可能对 OP 有用。
      【解决方案3】:

      哈希集,如果您需要快速访问数据,即如果您想在 O(1) 时间内知道集合中是否存在某些内容。

      在 .NET 4 中,使用 HashSet。它就像一个哈希表,但只存储值,而不是键/值对。

      HashSet<string> myStrings = new HashSet<string>();
      myStrings.Add(@"c:\foo\bar.txt");
      myStrings.Add(@"c:\foo\baz.gif");
      myStrings.Add(@"c:\foo\bat.bin");
      

      【讨论】:

      • 感谢您的回答,他是我最喜欢的回复方式,清晰、完整并附有示例 +1
      • P Campbell 是一个值得称赞的人。我只写了答案的开头,其余的,包括示例,由他/她提供。谢谢你 P 坎贝尔
      【解决方案4】:

      这最适合TRIE。这是一个示例:implementing a trie in c#

      要回答您的问题,是的,TRIE 存储唯一路径而不是字符串本身。

      尝试对您的任务非常有效,无论是在内存消耗方面还是在执行速度方面。

      编辑: 并不是说一个比另一个好,TRIE 是针对这种类型的存储/检索问题而发明的,并且非常有效。 散列也很快。如果您想知道哪一个最适合您的需求,请同时实施。无论哪种方式,都不应该花很长时间。 测量,测量,测量。

      【讨论】:

      • 为什么 trie 比 HashSet 更好?
      • 好的,你的回答很有帮助 +1
      【解决方案5】:

      通常用于存储唯一数据点的数据结构是集合。您可以为此使用 .NET HashSet&lt;T&gt; 类。使用 HashSet,您不必在添加值之前检查它是否存在,并且您也可以快速查找。

      【讨论】:

        【解决方案6】:

        您为什么不使用 Dictionary/HashTable 来快速查找集合。

        “可以存储一个表示唯一路径的值..”- 想想这个,每次你必须检查集合中是否存在某个值时,你必须加密/解密你的字符串。不好的方法

        编辑: 如果速度不是问题,为什么不将所有键存储在数据库中,然后您可能可以在表中快速循环查看路径是否存在?

        【讨论】:

        • 这取决于,就我而言,这不是问题,因为正如我所写,内存使用比速度更重要。显然我不会使用简单的列表。
        • 管理一个拥有数十万条路径的数据库比使用列表更糟糕,你不觉得吗?
        • 在某些地方你必须做出妥协!
        猜你喜欢
        • 2019-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-26
        • 2012-12-27
        • 2022-01-05
        相关资源
        最近更新 更多