1

テキストファイルで繰り返される文字の数を数えたかった..

私はこのコードを書きました

foreach(char c in File.ReadAllText(path))
{
    if(dic.ContainsKey(c))
    {
        int i=dic[c];
        dic[c]=i++;
    }
    else
    {
        dic.Add(c,1);
    }
}

1ユニークな単語をすべて追加していますが、文字が繰り返されている場合でも、すべてのキーの価値を示しています!

4

6 に答える 6

3

i++の値に 1 を加算しますが、インクリメント前のiの値を返しiます。あなたはそれをしたくありません。i1 ずつインクリメントされた値を返したいだけです。これを行うには、次のように記述します。

dic[c] = i+1;

余談ですが、代わりにLINQを使用してすべてを実行できます。

var dic = File.ReadAllText(path).GroupBy(c => c)
    .ToDictionary(group => group.Key, group => group.Count());
于 2013-10-28T17:02:47.237 に答える
3

私はあなたが欲しいと思います:

dic[c] = i + 1;

または、私見ですが、iafter を使用しないため、これは複雑さを増すだけです:

dic[c] = ++i;

説明:

i++ポストインクリメント操作です。これは、 の現在の値i割り当ててからインクリメントすることを意味します。要約すると、常に を読み込んで、 back を辞書に入れ、それを void に送信する前に をインクリメントします。dic[c] ii=1i=1i2


補遺:

一時変数を使用する必要はまったくありません。を使用して、1 回の操作で値を読み取って代入するdic[c] += 1;か、値をインクリメントすることもできますdic[c]++;

于 2013-10-28T17:00:42.733 に答える
2

dic[c] = i + 1;またはdic[c] += 1またはが必要dic[c]++です。iあなたのコードでは、割り当てが行われた後にポストインクリメント演算子がインクリメントしているため、 の値には影響しませんdic[c]

于 2013-10-28T17:01:41.610 に答える
2

dic[c]=i++;に変換します

dic[c] = i;
i = i++;

iは参照値ではないためi、ディクショナリ内に配置された の値は、ディクショナリ外でインクリメントしても変化しません。

dic[c]++;代わりに使用してください。

于 2013-10-28T17:01:42.697 に答える