多次比较字符串

时间:2013-03-05 11:00:48

标签: c# string algorithm hash compare

我正在生成随机脚本,但我必须保证每个新脚本都是唯一的(之前没有重复过)。因此,基本上已经生成的每个脚本都会与每个新脚本进行比较。

我不是只使用普通的字符串比较,而是认为必须有一种方法来对每个新脚本进行散列,以便比较更快。

关于如何散列字符串以更快地进行多重比较的任何想法?

5 个答案:

答案 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。这是一种判断新生成的字符串是否在之前生成的简单方法。