有没有比以下暴力实施c#字计数类更好的方法?
更新代码:抱歉!
/// <summary>
/// A word counting class.
/// </summary>
public class WordCounter
{
Dictionary<string, int> dictTest = new Dictionary<string, int> ();
/// <summary>
/// Enters a word and returns the current number of times that word was found.
/// </summary>
/// <param name="word">The word or string found.</param>
/// <returns>Count of times Found() was called with provided word.</returns>
public int Found ( string word )
{
int count = 1;
return dictTest.TryGetValue ( word, out count ) ? ++dictTest[word] : dictTest[word] = 1;
}
}
答案 0 :(得分:1)
对于matt的回应,Dictionary基本上是带有泛型的HashTable,所以查找是恒定的时间(好吧,不完全相同但是很多)。
答案 1 :(得分:0)
所以,你有一个包含26个对象的数组,第一个字母是该数组的索引,该数组是一个指向更多26个对象数组的指针数组(但只有当遇到那个字母时才会这样。)等等,第二个字母是第二级数组的索引...
Dictionary是否使用二进制搜索模式?它是否按字符串搜索?或者它是否向下散列字符串,如果没有,则将字符串散列为整数可能提高性能。从理论上讲,如果你手动完成,那么保持列表“排序”就没有任何开销,因为如果它不存在,初始二进制搜索将大致放弃应该在列表中插入的位置?
答案 2 :(得分:0)
您可以构建一个树,然后搜索将在字符串的长度中保持恒定的时间,您正在搜索。在这种情况下,树比使用哈希更节省空间。