Map 迭代更新F#映射与C#字典

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]=

我有一个包含在F#映射中的键/值对集合

我想:

  • 仅处理元组的第一项(即节点)
  • 遍历映射或节点列表中的键/值对
  • 如果键中的列表同时存在,则将映射中的节点值替换为这些值
  • 如果映射中不存在该键,则会将列表中的节点添加到映射中
  • 返回更新后的地图
  • 忽略返回的元组需要解析这一事实,如果我使用的是
    字典

    节点列表中的每个新节点
    {
    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