我有一个嵌套的地图,像这样:
Map<int, Map<int, int>>
而且我希望能够尽可能高效,整洁地将元素添加到嵌套Map中。
我当前的解决方案是这样的:
let AddStuff (collection:Map<int, Map<int, int>>) firstID secondID value =
let newValue = collection.[firstID].Add(secondID, value)
let newCollection = collection.Add(firstID, newValue)
newCollection
在我看来,这似乎不是F#
做事的方式,所以想知道添加到嵌套Map的最佳方法是什么?
编辑一些预期的输入/输出:
let aMap = map[(1, map[(1, 1)])]
let firstID = 1
let secondID = 2
let value = 2
let newMap = aMap firstID secondID value
// newMap = map[(1, map[(1, 1); (2, 2)])]
编辑2
看来partialCollection对输出没有影响,所以我将其从函数中删除了。
要使样式的功能更实用,可以将这些.Add
方法调用替换为对Map.add
函数的调用(Map
模块上的函数,而不是单个Map
对象上的方法调用)。您可能还希望将函数的collection
参数移到AddStuff
最后一个参数,以便可以更轻松地与|>
运算符一起使用。然后看起来像:
let AddStuff firstID secondID value (collection:Map<int, Map<int, int>>) =
let newValue = collection.[firstID] |> Map.add secondID value
collection |> Map.add firstID newValue
您可以像这样使用它:
let newMap = aMap |> AddStuff firstID secondID value
您可以自行决定哪种样式更好,但是我|>
自己更喜欢这种样式,因为它让我根据“这些数据通过这些操作进行传递”来思考。
编辑:该功能可能看起来有些空白更好:
let AddStuff firstID secondID value (collection:Map<int, Map<int, int>>) =
let newValue =
collection.[firstID]
|> Map.add secondID value
collection |> Map.add firstID newValue
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句