更改字典中Pair(String,Integer)的整数值

时间:2017-08-17 15:45:57

标签: .net vb.net dictionary

我创建了一个字符串整数:

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

错误是“属性值是只读的”。

有人可以告诉我一个很好的方法(也很快)吗?

3 个答案:

答案 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%的情况永远不会成为你表现的瓶颈。

但是你摆脱了因改变现有物体而引起的所有问题。