使用字典的键更新值
Posted
技术标签:
【中文标题】使用字典的键更新值【英文标题】:Updating Value using key of the dictionary 【发布时间】:2013-11-01 14:13:00 【问题描述】:我在 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
【问题讨论】:
无法使用 KeyValuePair,在更新数据后会出现错误。 如果你正确地解释了你的确切条件(输入 + 你想得到什么),我相信无论是蒂姆还是我都可以提供一个完全符合你要求的代码。请专注于一个问题并删除另一个问题,下次如果您的问题没有得到妥善解决,您应该考虑提出(或更好地解释您的问题)而不是发布新问题。 【参考方案1】:有时您确实想对字典中的每个项目执行一些操作。例如,我使用字典来存储相当大的数据结构,仅仅是因为从一个巨大的堆中获取我的数据似乎几乎是瞬时的,即使字典看起来是 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
因为您没有更改要枚举的内容,所以不会引发异常。当然,如果出现其他问题并弄乱了您的数据,那么您要么不会遍历所有内容,要么不会在集合中找到关键,这取决于发生了什么。我写这种东西只是为了在自己的机器上进行繁重的处理。
【讨论】:
这似乎没有回答如何编辑给定键的值的问题。这是如何在给定所有键的情况下编辑所有值。【参考方案2】:如果您知道要更改哪个 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 无法编译,因为 Key
和 Value
属性是只读的。
方法 B 将更改计数/值,但会导致 Next
出现异常,因为 kvp
不再有效。
字典有一个内置方法可以为您完成所有这些工作:
If myDict.ContainsKey(searchKey) Then
myDict(searchKey) = "1"
End If
使用键从字典中获取/设置/更改/删除。
【讨论】:
以上是关于使用字典的键更新值的主要内容,如果未能解决你的问题,请参考以下文章
Newtonsoft Json 将字典反序列化为来自 DataContractJsonSerializer 的键/值列表