我制作了一张包含多个词典的地图。每次收到数据时,我都会在Map中找到相应的字典,然后在这个字典中添加新信息。 但问题是每次我尝试添加信息时,它都不会仅在相应的字典中添加它,而是将其添加到地图中的所有字典中。 拜托,我变得疯了。
while datareceive do
let refdictionary = ref totalmap.[index] //totalmap has a lot of Dictionary, which is indexed by "index"
let dictionnarydata = totalmap.[index]
if dictionnarydata.ContainsKey(key1) then
........
else
refdic.Value.Add(key1,num) //if the corresponding dictionary does not have such information, then add it in it
()
答案 0 :(得分:4)
如评论中所述,如果您正在学习函数式编程,那么最好的方法是使用不可变数据结构 - 在这里,您可以使用将索引映射到嵌套映射的映射(其中包含键值信息,你需要)。
尝试使用以下示例:
// Add new item (key, num pair) to the map at the specified index
// Since totalMap is immutable, this returns a new map!
let addData index (key:int) (num:int) (totalmap:Map<_, Map<_, _>>) =
// We are assuming that the value for index is defined
let atIndex = totalmap.[index]
let newAtIndex =
// Ignore information if it is already there, otherwise add
if atIndex.ContainsKey key then atIndex
else atIndex.Add(key, num)
// Using the fact that Add replaces existing items, we
// can just add new map in place of the old one
totalmap.Add(index, newAtIndex)
使用上述功能,您现在可以创建初始地图,然后向其添加各种信息:
// Create an int-indexed map containing empty maps as values
let totalmap = Map.ofSeq [ for i in 0 .. 10 -> i, Map.empty ]
totalmap
|> addData 0 1 42
|> addData 0 1 32
|> addData 1 10 1