在For循环中无法更改字典的值?

时间:2015-11-23 02:30:41

标签: for-loop dictionary f#

所以我对F#有点新,但我有C#的背景。我正在编写一个迭代Dictionary<string, int>的代码,为每个元素添加1,如果该值超过100,则将一个元素添加到列表中。这是我的代码:

//Early on in the code
let variables = new Dictionary<string, int>()
let variablecnt = new Dictionary<string, int>()
let trash = new List<int>()

//Later on in the code at a higher encapsulation level
    for KeyValue(j, k) in variablecnt do
        variablecnt.[j] <- k+1
        if variablecnt.[j]=100 then
            trash.Add(0)
            variables.Remove(j) |> ignore

当它运行时,我得到以下异常:

System.InvalidOperationException was unhandled
Message: An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll
Additional information: Collection was modified; enumeration operation may not execute.

它给出的行号对应于:

variablecnt.[j] <- k+1

我理解它在说什么,但我怎么能做我想做的事情呢?我花了很多时间试图解决这个问题并研究答案,但我没有发现任何有用的东西(F#没有像C#这样的语言那么多的资源)。我已尝试将mutable关键字添加到let语句中,但这不会改变任何内容。

另外,我使用System.Collections.Generic.Dictionary&lt;&gt;字典而不是F#dict(),因为我想我更熟悉.NET类。同样的原因我经常使用Console.WriteLine而不是printf(抱歉!)

0 个答案:

没有答案