次のような一意のパスを大量に保存する必要があります"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はこのタイプのストレージ/取得の問題のために発明されたものであり、非常に効率的です。 ハッシュも高速です。どちらがニーズに最も適しているかを知りたい場合は、両方を実装してください。どちらの方法でも長くはかからないはずです。 測定、測定、測定。
コレクションをすばやく検索できるようにする目的で、Dictionary/HashTableを使用してみませんか。
「一意のパスを表す値を格納することは可能ですか。」-これについて考えてみてください。コレクションに値が存在することを確認する必要があるたびに、文字列を暗号化/復号化する必要があります。良くないアプローチ
編集: 速度が問題ではない場合は、データベースにすべてのキーを保存して、パスが存在するかどうかを確認するためにテーブルをすばやくループすることができますか?
一意のデータポイントを格納するためによく使用されるデータ構造はセットです。これには.NETHashSet<T>
クラスを使用できます。HashSetを使用すると、値を追加する前に値が存在するかどうかを確認する必要がなく、クイックルックアップも取得できます。