【发布时间】:2013-12-16 10:43:23
【问题描述】:
我正在尝试在 F# 中遍历 IDictionary(原因稍后解释...),并将每个值四舍五入到指定的精度。基本上这就是我想要做的:
List.iter (fun(x) -> a.Item(x) <- Math.Round(a.Item(x), input.precision)) (ICollectionToDoubleList a.Keys)
(其中 ICollectionToDoubleList 采用 ICollection a.Keys 并将其转换为双重列表)。 但是,由于您无法更改闭包内的可变变量,因此无法编译。
我的第一次尝试是这样的:
List.iter (fun(x) -> let p = Math.Round(a.Item(x), input.precision)
a.Item(x) := p
) (ICollectionToDoubleList a.Keys)
但是我得到了错误:
This expression was expected to have type
'a ref
but here has type
double
关于a.Item(x)
我可以将 IDictionary 转换为两个列表(或元组列表),执行舍入,然后重新转换为 IDictionary,但这似乎有点混乱和令人费解。
非常感谢任何指导。
编辑:
我忘了说a被定义为:
let mutable (a : IDictionary<double,double>) = ...
【问题讨论】:
-
只是一个简单的问题,为什么不使用不可变的
Map?那么代码会简单得多:) -
如果可能的话,我不想创建一个新集合。
-
嗯...好吧,那是为什么呢?我只是好奇...
标签: f#