Dictionary 在fsharp中交换映射中的键和值
如何创建一个与原始贴图类似的新贴图,但在Fsharp中使用交换的键和值? 例如,我有这个Dictionary 在fsharp中交换映射中的键和值,dictionary,f#,functional-programming,swap,Dictionary,F#,Functional Programming,Swap,如何创建一个与原始贴图类似的新贴图,但在Fsharp中使用交换的键和值? 例如,我有这个 let map1 = [("A", "1"); ("B", "2"); ("C", "3");] |> Map.ofList 想要得到这个: let map2 = [("1", "A"); ("2", "B"); ("3", "C");] |> Map.ofList 谢谢你的帮助 也许你会做出这个决定: let map1 = Map.ofList [("A", "1"); ("B", "2"
let map1 =
[("A", "1"); ("B", "2"); ("C", "3");]
|> Map.ofList
想要得到这个:
let map2 =
[("1", "A"); ("2", "B"); ("3", "C");]
|> Map.ofList
谢谢你的帮助 也许你会做出这个决定:
let map1 = Map.ofList [("A", "1"); ("B", "2"); ("C", "3")]
map1 |> printfn "%A"
let rev map: Map<string,string> =
Map.fold (fun m key value -> m.Add(value,key)) Map.empty map
rev map1 |> printfn "%A"
Link:
< p>您可以将其转换为列表并返回,调用函数在中间进行交换。let swap (x, y) = y, x
let swapAll tuples = List.map swap tuples
let invert map = map |> Map.toList |> swapAll |> Map.ofList
这种方法在某种程度上突出了函数式编程的优点——你可以通过组合一些小的构建块来构建复杂的行为。你在哪一部分上卡住了?展示一次尝试?@John Palmer有什么理由展示不起作用的代码吗?当然,它让我们知道如何最好地帮助你。例如,有一个非常明显的解决方案具有普通的性能,也许这适合您的情况。可能您的解决方案只是有一个可以修复的小错误。请注意,如果您不想限制为字符串,可以将其键入
Map
。@Dax Fohl,谢谢。好多了
let swap (x, y) = y, x
let swapAll tuples = List.map swap tuples
let invert map = map |> Map.toList |> swapAll |> Map.ofList