私は問題につまずいています。私が間違っていることについては何の手がかりもありません。私は数え切れないほどのものを試しましたが、何らかの理由でそれはうまく動作しません。私のメインループ:コードは辞書全体を反復処理していませんか?
static Dictionary<string, int> dict = new Dictionary<string, int>();
public static void IterateOverEachUser()
{
if (dict.Count > 0) {
foreach (KeyValuePair<string, int> item in dict.ToList())
{
string userName = item.Key;
int amountLeft = item.Value;
if(amountLeft == 60)
{
Log(userName + " started!");
}
Log(userName + amountLeft);
dict[userName] = dict[userName] - 1;
amountLeft = item.Value;
if(amountLeft == 0)
{
Log(userName + " ran out!");
}
}
}
}
public static void AddUser(string User)
{
if (dict.ContainsKey(User))
{
Log("User already exists.");
}
else
{
dict.Add(User,60);
Log("User has been added.");
}
}
私は5秒ごとにIterateOverEachUser()をループしています。メソッドを使用してユーザーを追加するとすべて問題ありませんが、2つ目の値を追加すると、その値は60に固定され、残りの値は固定されます。
これはなぜ起こるのですか?私はJavaからHashMapsを使用していますが、意図したとおりに動作する同じコードを使用しています。 (つまり、すべてのユーザーが繰り返し処理され、すべてのユーザーの値が1減算され、5秒ループでIterateOverEachUser()メソッドが再び呼び出されるまで停止します)。
ありがとうございます!
私はdownvotedますが、私はどんな建設的な批判を得ることはありませんか?私の知る限り、私のコードは完璧に動作するでしょうか?私は自分のコードを投稿した、私は広範な研究をしたことを示した、私は自分の問題を説明し、私はコードが何を期待しているか説明する。これはdownvoteに値するものではありません.. imo –
注意して、それをルーピングしながら辞書を変更しています。ほとんどの言語で、これは問題になる可能性があります –
@HoàngLongご意見ありがとうございます!私はこれについても考えましたが、 ".ToList()"を追加しても問題は解決しません。また、これを実行して実行中に辞書を編集しなくても良い方法を知っていますか? –