我需要存储大量独特的路径,例如:"C:\MyDir\MySubDir\myfile.txt"
.
我希望能够快速检查我的集合中是否包含路径,以及以上,以尽可能少地使用内存。
什么是最适合这项任务的集合?
是否可以存储一个代表唯一路径的值,而不是字符串本身,以使用更少的内存?
我需要存储大量独特的路径,例如:"C:\MyDir\MySubDir\myfile.txt"
.
我希望能够快速检查我的集合中是否包含路径,以及以上,以尽可能少地使用内存。
什么是最适合这项任务的集合?
是否可以存储一个代表唯一路径的值,而不是字符串本身,以使用更少的内存?
看看Trie我们用 2000 万条路径做得非常有效
一个哈希集,如果您需要快速访问数据,即如果您想在 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");
这最适合TRIE。这是一个示例:在 c# 中实现一个 trie。
要回答您的问题,是的,TRIE 存储唯一路径而不是字符串本身。
尝试对您的任务非常有效,无论是内存消耗还是执行速度。
编辑: 并不是说一个比另一个好,TRIE 是为这种类型的存储/检索问题而发明的,并且非常有效。 散列也很快。如果您想知道哪一个最适合您的需求,请同时实施。无论哪种方式,都不应该花很长时间。 测量,测量,测量。
通常用于存储唯一数据点的数据结构是集合。您可以为此使用 .NETHashSet<T>
类。使用 HashSet,您不必在添加值之前检查值是否存在,并且您也可以快速查找。
您为什么不使用 Dictionary/HashTable 来实现快速查找集合的目的。
“可以存储一个表示唯一路径的值..” - 想想这个,每次你必须检查集合中是否存在某个值时,你必须加密/解密你的字符串。不好的做法
编辑: 如果速度不是问题,为什么不将所有键存储在数据库中,然后您可以在表中快速循环以查看路径是否存在?