使用字典的键更新值

时间:2013-10-23 10:37:58

标签: vb.net vb.net-2010

我在VB.NET Windows应用程序中使用Dictionary

我在Dictionary中添加了几个值,我想用他们的密钥编辑一些值。

实施例: 下面我们有一个DATA表,我想更新密钥的值 - “DDD”到1

AAA - "0"   
BBB - "0" 
CCC - "0' 
DDD - "0"

如何做到这一点?

For Each kvp As KeyValuePair(Of String, String) In Dictionary1
    If i = value And kvp.Value <> "1" Then
        NewFlat = kvp.Key.ToString
        ---------------------------------------------
        I want to update set the Value 1 of respective key.
        What should I write here ? 
        ---------------------------------------------
        IsAdded = True
        Exit For
    End If
    i = i + 1
Next kvp

2 个答案:

答案 0 :(得分:13)

如果您知道要更改哪个kvp的值,则不必迭代(for each kvp)字典。将“DDD”/“0”更改为“DDD”/“1”:

 myDict("DDD") = "1"

cant use the KeyValuePair its gives error after updating it as data get modified.

如果您尝试在For Each循环中修改任何集合,则会获得InvalidOperationException。一旦集合发生变化,枚举器(For Each变量)就会变为无效。特别是对于词典,这不是必需的:

Dim col As New Dictionary(Of String, Int32)
col.Add("AAA", 0)
...
col.Add("ZZZ", 0)

Dim someItem = "BBB"
For Each kvp As KeyValuePair(Of String, Int32) In col
    If kvp.Key = someItem Then

        ' A) Change the value?
         vp.Value += 1          ' will not compile: Value is ReadOnly

        ' B) Update the collection?
        col(kvp.Key) += 1
    End If
Next

方法A不会编译,因为KeyValue属性是ReadOnly 方法B将更改计数/值,但导致Next上的例外,因为kvp不再有效。

字典有一个内置的方法来为你做所有这些:

If myDict.ContainsKey(searchKey) Then
    myDict(searchKey) = "1"
End If

使用键从字典中获取/设置/更改/删除。

答案 1 :(得分:0)

有时候你真的想对字典中的每个项目做些什么。例如,我使用字典存储相当大的数据结构,只是因为它似乎几乎是瞬间从大堆中获取数据,即使字典似乎是40MB的RAM。

例如:

dim col as new dictionary (of string, myStructData)

dim colKeys() as string = col.keys.toArray()
for each colKey in colKeys
  dim tempVal as new myStructData= col(colKey)
  'do whatever changes you want on tempVal
  col(colKey)=tempVal
next colKey

因为您没有更改您要枚举的内容,所以不会抛出异常。当然,如果其他东西出现并搞砸了你的数据,那么你要么不对所有内容进行迭代,要么根据发生的事情找不到集合中的密钥。我只在自己的机器上进行重处理这类事情。