2012-08-14 51 views
1

如果值是某物,我正嘗試更新c#字典對象中的值。如果值是某物,更新c#字典對象中的值

Dictionary<string, int> Section = new Dictionary<string, int>() 
{ 
      {"a", 1}, 
      {"b", 0}, 
      {"c", 2}, 
      {"d", 0}, 
      {"e", 0}, 
      {"f", 0}, 
}; 
  1. 欲遍歷節對象,並且如果值= 2我想將其設置爲1
  2. 我想設置從直到結束第四元素的值= 1。(即,從「 d」到 「f」)

謝謝,

普利文

我曾嘗試,

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

回答

2
  • 我要遍歷節對象,如果值= 2我想將它設置爲1

你可以去翻字典項,並更改值需要。

這可能是這樣的:。

var itemsToEdit = Section.Where(kvp => kvp.Value == 2).Select(kvp => kvp.Key).ToList(); 
foreach(var item in itemsToEdit) 
    Section[item] = 1; 
  • 我想設置從直到結束第四元素的值= 1(即,從 「d」 到 「f」)

認識到,一旦您將值放入字典中,它們會丟失所有的順序。字典本質上是一個無序的集合。

0

1:

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; 
} 
+0

門納嗨,我的第一個問題得到了解決,第二喧囂噸。 – 2012-08-14 22:10:33

+0

就像@Reed說過的,一旦你把這些值放在字典裏,他們就會失去所有的訂單。字典本質上是一個無序的集合。所以,我需要找到個人元素並設置值。 – 2012-08-14 22:12:45

+0

您可以使用[有序詞典](http://msdn.microsoft.com/zh-cn/library/system.collections。如果您需要維護秩序,請使用special.ordereddictionary.aspx)。不過,它不會被強類型化。 – 2012-08-14 22:24:50

0

不能在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; 
} 
0
int index = 0; 
foreach (int value in Section.Values) { 

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

    index++; 
} 

OR

for (int i = 0; i < Section.Count; i++) { 
    if ((i > 3) || (Section[i] == 2)) { 
    Section[i] = 1; 
    } 
} 
+0

我懷疑你的解決方案會做你期望的。您不能假定'.Values'集合將按鍵返回,您可能會根據'value == 2'更新'Section [index] = 1',其中'value'綁定到另一個索引。 – faester 2012-08-14 21:42:14

+0

@faester「Dictionary .ValueCollection中的值的順序未指定,但與Keys屬性返回的Dictionary .KeyCollection中的相關鍵的順序相同。請參閱http://msdn.microsoft.com/en-us/library/ekcfxy3x.aspx。因此,如果索引器真正返回不同的順序,我們可以通過使用鍵來解決它(儘管它更麻煩)。或者我們可以使用替代'for'循環。 – 2012-08-14 21:59:19

+0

嘿彼得 - 謝謝:)然後唯一的問題可能是如果鍵總是遞增1。 – faester 2012-08-15 10:26:41