私はランダムなスクリプトを生成していますが、それぞれの新しいスクリプトが一意であることを保証する必要があります (これまで繰り返されたことはありません)。したがって、基本的に、すでに生成された各スクリプトは、すべての新しいスクリプトと比較されます。
通常の文字列比較を使用する代わりに、比較が高速になるように、新しいスクリプトごとにハッシュする方法が必要だと考えています。
複数の比較を高速化するために文字列をハッシュする方法についてのアイデアはありますか?
1つの方法は、HashSet<String>
HashSetclassは、高性能のセット操作を提供します。セットは、重複する要素を含まず、要素の順序が特定されていないコレクションです。
HashSet<string> scripts = new HashSet<string>();
string generated_script = "some_text";
if (!scripts.Contains(generated_script)) // is HashSet<String> dont contains your string already then you can add it
{
scripts.Add(generated_script);
}
また、duplicate items
配列内に存在するかどうかを確認できます。しかし、これはと比較してあまり効率的ではないかもしれませんHashSet<String>
string[] array = new[] {"demo", "demo", "demo"};
string compareWith = "demo";
int duplicates_count = array.GroupBy(x => x).Count(g => g.Count() > 1);
以下のように HashSet を使用します
string uniqueCode= "ABC";
string uniqueCode1 = "XYZ";
string uniqueCode2 = "ABC";
HashSet<string> uniqueList = new HashSet<string>();
uniqueList.Add(uniqueCode);
uniqueList.Add(uniqueCode1);
uniqueList.Add(uniqueCode2);
uniqueListのカウントが表示される場合は 2 になります。したがって、ABC は 2 回存在しません。
HashSet を使用できます。ハッシュセットには重複が含まれないことが保証されています
スクリプトをそのハッシュとともに保存します。
class ScriptData
{
public ScriptData(string script)
{
this.ScriptHash=script.GetHashCode();
this.Script=script;
}
public int ScriptHash{get;private set;}
public string Script{get;private set;}
}
次に、新しいランダム スクリプトが一意であるかどうかを確認する必要があるときはいつでも、新しいスクリプトのハッシュ コードを取得ScriptData
し、同じハッシュ コードを持つすべてのインスタンスを検索します。何も見つからない場合は、新しいランダム スクリプトが一意であることを知っています。いくつか見つかった場合、それらは同じである可能性があり、それらが同一であるかどうかを確認するために、スクリプトの実際のテキストを比較する必要があります。
string
生成されたそれぞれをHashSetに格納できます。
Contains
新しい文字列ごとに、O(1) の複雑さで実行されるメソッドを呼び出します。これは、新しく生成された文字列が以前に生成されたかどうかを判断する簡単な方法です。