Map 迭代更新F#映射与C#字典
我有一个包含在F#映射中的键/值对集合 我想:Map 迭代更新F#映射与C#字典,map,f#,key-value,c#-to-f#,keyvaluepair,Map,F#,Key Value,C# To F#,Keyvaluepair,我有一个包含在F#映射中的键/值对集合 我想: 仅处理元组的第一项(即节点) 遍历映射或节点列表中的键/值对 如果键中的列表同时存在,则将映射中的节点值替换为这些值 如果映射中不存在该键,则会将列表中的节点添加到映射中 返回更新后的地图 忽略返回的元组需要解析这一事实,如果我使用的是字典 节点列表中的每个新节点 { if(nodesCollection.nodes.Contains(newNode.myfloat)) nodesCollection.nodes[newNode.myfloat]=
字典
节点列表中的每个新节点
{
if(nodesCollection.nodes.Contains(newNode.myfloat))
nodesCollection.nodes[newNode.myfloat]=节点
其他的
nodesCollection.nodes.Add(newNode.myfloat,node);
}
返回nodesCollection.nodes
我将如何使用映射和函数样式来实现这一点?折叠是一种以不变的迭代/递归方式操纵状态的通用技术。如果你想在C#中使用它,那就是聚合LINQ扩展方法 在F#Map.add中,实际上是add/replace,因此不需要根据是否包含键进行分支
type node = {myFloat:float; data1:int; data2:int;}
type nodesCollection = {metaData:int; nodes:Map<float,node>}
let nodeColl = { metaData = 5; nodes = Map.empty }
let results : (node * int * int * int * int) List = []
let nodes = List.map (fun (n, _, _, _, _) -> n) results
let res = List.fold (fun map e -> Map.add e.myFloat e map) nodeColl.nodes nodes
type节点={myFloat:float;data1:int;data2:int;}
类型nodesCollection={metaData:int;nodes:Map}
让nodeColl={metaData=5;nodes=Map.empty}
让结果:(节点*int*int*int*int*int)列表=[]
让nodes=List.map(fun(n,,,,,,->n)结果
让res=List.fold(趣味地图e->map.add e.myFloat e地图)nodeColl.nodes
查看此处的映射功能
val results : (node * int * int * int * int) List
type node = {myFloat:float; data1:int; data2:int;}
type nodesCollection = {metaData:int; nodes:Map<float,node>}
let nodeColl = { metaData = 5; nodes = Map.empty }
let results : (node * int * int * int * int) List = []
let nodes = List.map (fun (n, _, _, _, _) -> n) results
let res = List.fold (fun map e -> Map.add e.myFloat e map) nodeColl.nodes nodes