我正在生成随机脚本,但我必须保证每个新脚本都是唯一的(之前没有重复过)。因此,基本上已经生成的每个脚本都会与每个新脚本进行比较。
我不是只使用普通的字符串比较,而是认为必须有一种方法来对每个新脚本进行散列,以便比较更快。
关于如何散列字符串以更快地进行多重比较的任何想法?
答案 0 :(得分: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);
答案 1 :(得分: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 :(得分:0)
您可以使用HashSet。保证哈希集永远不会包含重复项
答案 3 :(得分:0)
将脚本及其哈希存储起来:
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
实例。如果您没有找到任何您知道的新随机脚本是唯一的。如果你找到了一些,那么可能是相同的,你将不得不比较脚本的实际文本,以确定它们是否相同。
答案 4 :(得分:0)
您可以将每个已生成的string
存储在HashSet。
对于每个新字符串,您将调用以O(1)复杂度运行的方法Contains
。这是一种判断新生成的字符串是否在之前生成的简单方法。