代码之家  ›  专栏  ›  技术社区  ›  Sonic Soul

用C查找字符串的最快方法?

  •  6
  • Sonic Soul  · 技术社区  · 15 年前

    在C中实现类似内容的最快方法是什么:

      private List<string> _myMatches = new List<string>(){"one","two","three"};
      private bool Exists(string foo) {
          return _myMatches.Contains(foo);
      }
    

    注意,这只是一个例子。我只需要对一些作为字符串产生的值执行低级过滤。我可以实习,但仍然需要支持一个或多个字符串的比较。也就是说,要么字符串到字符串比较(1个筛选器),要么字符串列表(多个筛选器)中存在字符串。

    3 回复  |  直到 15 年前
        1
  •  18
  •   Reed Copsey    15 年前

    你可以通过使用 HashSet<T> 尤其是如果你要添加更多的元素:

    private HashSet<string> _myMatches = new HashSet<string>() { "one", "two", "three" };
    
    private bool Exists(string foo)
    {
        return _myMatches.Contains(foo);
    }
    

    这将击败 List<T> 自从 HashSet<T>.Contains 是O(1)操作。

    列表& T; 另一方面,s包含方法o(n)。它将在每次通话中搜索整个列表(直到找到匹配项)。随着添加更多元素,这将变慢。

        2
  •  0
  •   Elf King    15 年前

    哈希表是快速字符串查找的朋友。

    看看一个很好的教程 Working with HashTable in C# 2.0

        3
  •  0
  •   µBio    15 年前

    你得做个侧面介绍。您的意思是最快的查找(例如,初始化时间是否计算在内)?

    @埃尔夫金已经提到了哈希表,我想把它指给你看(特别是 HashSet<T> )