我创建了一个字符串整数:
Private m_MonFreq As New Dictionary(Of String, Integer)
在我的代码的某些部分,我需要更改每对的整数值,但我找不到快速执行此操作的方法。
我的方法不起作用:
For Each nItem As KeyValuePair(Of String, Integer) In m_MonFreq
nItem.Value = lMax - nItem.Value
Next
错误是“属性值是只读的”。
有人可以告诉我一个很好的方法(也很快)吗?
答案 0 :(得分:3)
您可以通过再次使用该键来直接设置字典中的值:
Imports System.Linq ' for extension method .ToArray()
For Each key As String in m_MonFreq.Keys.ToArray()
m_MonFreq(key) = lMax - m_MonFreq(key)
Next
请注意,您必须将密钥复制到新的可枚举(在本例中为数组)以使另一个枚举器循环。字典中的那个将通过在循环中重新分配值来改变。这样会导致异常。
答案 1 :(得分:3)
For Each nItem As String in m_MonFreq.Keys
m_MonFreq(nItem) = lMax - m_MonFreq(nItem)
Next
答案 2 :(得分:0)
另一种使用方法"功能性"方式并创建具有更新值的新字典。
m_MonFreq =
m_MonFreq.ToDictionary(Function(item) item.Key, Function(item) lMax - item.Value)
性能不会受到影响,它仅在创建新字典实例时与可变For
循环不同。其中99.99%的情况永远不会成为你表现的瓶颈。
但是你摆脱了因改变现有物体而引起的所有问题。