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. 我想将值 = 1 从第 4 个元素设置到结束。(即,从“d”到“f”)

谢谢,

普拉文

我试过了,

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

4 回答 4

2
  • 我想遍历 Section 对象,如果 value= 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”)

意识到,一旦将值放入字典中,它们就会失去所有排序。字典本质上是一个无序的集合。

于 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;
}

其次,我们首先对列表进行排序,然后跳过前三个元素以获取第四个元素:

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

第一个:

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

第二:

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 回答