字典重新添加单词作为新键而不是增加值

时间:2015-05-06 07:16:19

标签: c# dictionary

我正在编写一个程序,用于查找文本中的每个唯一单词并将其打印在文本框中。我通过在字典中打印每个键来完成此操作,但是我的字典将每个单词添加为单独的键而不是忽略已经存在的单词。

正确调用该函数,它确实可以正常工作,但是我只需要打印整个文本。

编辑:我正在从文本文件中读取字符串,然后将其发送到函数。 这是输入字符串和输出:

输出

  

成为或不成为这个问题是否是高贵的想法   令人发指的财富的吊索和箭头或采取武器对海   麻烦和反对结束他们睡觉不再睡觉说我们结束   令人痛苦的一千个自然震撼那个肉体的继承人是完美的

public string FindUniqueWords(string text)
{
    Dictionary<string, int> dictionary = new Dictionary<string, int>();

    string uniqueWord = "";
    text = text.Replace(",", ""); //Just cleaning up a bit
    text = text.Replace(".", ""); //Just cleaning up a bit
    string[] arr = text.Split(' '); //Create an array of words

    foreach (string word in arr) //let's loop over the words
    {
        if (dictionary.ContainsKey(word)) //if it's in the dictionary
            dictionary[word] = dictionary[word] + 1; //Increment the count
        else
            dictionary[word] = 1; //put it in the dictionary with a count 1
    }

    foreach (KeyValuePair<string, int> pair in dictionary) //loop through the dictionary
    {
        uniqueWord += (pair.Key + " ");
    }
    uniqueWords.Text = uniqueWord;
    return ("");
}

3 个答案:

答案 0 :(得分:2)

您正在使用System.IO.File.ReadAllText阅读文字,因此text也可能包含换行符。

arr = text.Split(' ')替换为arr = text.Split(' ', '\r', '\n')或添加其他替换:text = text.Replace(Environment.NewLine, " ");

当然,通过查看调试器中的arr,您可以自己找到。

答案 1 :(得分:1)

更简短的方法:(别忘了使用Using System.Linq)

    string strInput = "TEST TEST Text 123";
    var words = strInput.Split().Distinct();                
    foreach (var word in words )
    {
        Console.WriteLine(word);
    }

答案 2 :(得分:-1)

您的代码按预期工作(但忽略大小写)。问题几乎肯定在于在您的应用程序中显示结果,或者您如何调用FindUniqueWords方法(而不是一次调用完整文本)。

此外,非常重要的是要注意:默认情况下,Dictionary<TKey, TValue>只是不能多次包含一个键。它首先会破坏字典的整个目的。只有当你在某处覆盖Equality比较时,才有可能这样做。

如果我尝试使用以下输入代码:

  

是或不是那就是问题

输出变为:

  

成为或不成为问题

它的运作方式应该如此。