1

値が何かである場合、c#ディクショナリオブジェクトの値を更新しようとしています。

Dictionary<string, int> Section = new Dictionary<string, int>()
{
            {"a", 1},
            {"b", 0},
            {"c", 2},
            {"d", 0},
            {"e", 0},
            {"f", 0},
};
  1. Sectionオブジェクトをループしたいのですが、value=2の場合は1に設定します
  2. 4番目の要素から最後まで値=1に設定したい(つまり、「d」から「f」まで)

ありがとう、

プラビーン

私が試してみました、

foreach(var item in Section)
{
   if(item.value == 2)
   {
     item.value == 1;
   }
}
4

4 に答える 4

2
  • Section オブジェクトをループして、値 = 2 の場合は 1 に設定したい

Dictionary 項目を調べて、必要に応じて値を変更できます。

これは次のようになります。

var itemsToEdit = Section.Where(kvp => kvp.Value == 2).Select(kvp => kvp.Key).ToList();
foreach(var item in itemsToEdit)
     Section[item] = 1;
  • 値 = 1 を 4 番目の要素から最後まで (つまり、"d" から "f" まで) に設定したい

値を辞書に入れると、すべての順序が失われることに注意してください。Dictionary は、本質的に順序付けられていないコレクションです。

于 2012-08-14T21:15:29.367 に答える
1

内のコレクションを変更することはできませんforeach

ただし、派生コレクションをループすることはできます。ToList()別のコレクションを作成することに注意してください (Where()元のコレクションをラップするだけです)。

foreach (var item in Section.Where(kvp => kvp.Value == 2).ToList())
{
    Section[item.Key] = 1;
}

次に、最初にリストを並べ替え、次に最初の 3 つの要素をスキップして 4 番目以降の要素を取得します。

foreach (var item in Section.OrderBy(kvp => kvp.Key).Skip(3).ToList())
{
    Section[item.Key] = 1;
}
于 2012-08-14T21:30:33.533 に答える
0

1位:

foreach (var key in Section.Where(item => item.Value == 2).Select(item => item.Key).ToList())
{
    Section[key] = 1;
}

2番目:

foreach (var key in Section.Keys.Where(k=>String.Compare(k, "d", StringComparison.Ordinal)>=0).ToList())
{
    Section[key] = 1;
}
于 2012-08-14T21:26:08.320 に答える
0
int index = 0;
foreach (int value in Section.Values) {

  if ((index > 3) || (value == 2)) { 
    Section[index] = 1; 
  }

  index++;
}

また

for (int i = 0; i < Section.Count; i++) {
  if ((i > 3) || (Section[i] == 2)) {
    Section[i] = 1;
  }
}
于 2012-08-14T21:32:28.167 に答える