2017-01-09 10 views
0

私はしばしばファイルパスを使用して、ある種のソフトウェアシステムに一意のIDを提供します。ファイルパスを取って比較的高速な(計算上)方法で一意の整数に変換する方法はありますか?一意のファイルパスをユニークな整数に変換する

大規模な整数でも問題ありません。私が知る限り、これはかなり素晴らしいアルゴリズムでなければなりませんが、場合によっては非常に便利です。

このようなものが存在するかどうかは知りませんか?

+0

これはおそらく私の質問に答える:http://stackoverflow.com/questions/12238228/how-do-i-convert-a-directory-path-to-a-unique-numerical-identifier-linux-c –

+0

もしメモリ内で実行すると、対応する言語で標準的なハッシュマップを使用できます。ファイル名だけでなく、同様の状況でも使用できます。 –

+0

あなたはいくつかの一意の整数にファイル名をハッシュすることを意味しますか? –

答えて

1

あなたはinode番号を試みることができる:

プログラムは一つだけのマシン上で実行されているとあなたがのIDを複製し、新しいファイルを気にしない場合は、iノード番号のdjonesの提案は良いです@
fs.statSync(filename).ino 
1

古い、削除されたもの。 iノード番号は再利用されます。

もう1つの簡単なアプローチは、大きな整数空間へのパスのハッシュです。例えば。 (Javaでは、Guava Hashingクラスを使用します;いくつかのjsポートがあります)、10億のパス間の衝突の可能性はまだ1/2^96です。あなたが本当に不快なら、すでに使用しているハッシュ値のセットを保持し、衝突時に再ハッシュします。

1

これは私のコメントです。 メモリで実行する場合は、対応する言語で標準のハッシュマップを使用できます。ファイル名だけでなく、同様の状況でも使用できます。通常、異なるプログラミング言語のハッシュマップはバケットによる衝突を満足するため、ハッシュ番号と対応するバケット番号は一意のIDを提供します。

Btw、自分のハッシュマップを作成するのは難しいことではありません。たとえば、番号などを取得するなど、基本的な構造を制御できます。

+0

私の場合は、複数のプロセス(すべて同じ共有メモリではないかもしれない)かもしれないこの右に難しい –

+0

はい、それは簡単ではないかもしれませんが、これを克服するために、このハッシュマップを維持するサービスを書くことができます。通常はまともなプログラミング言語が並行性をサポートしています。したがって、他のすべてのアプリケーションから、そのサービスを呼び出すことで、固有の番号を付けることができます。随時(たとえば、真夜中)、そのサービスによってデータベースまたはファイルにこれらの固有の番号を自動的に保存することができます。この方法では、情報を失うことはありません。 –

関連する問題