Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 在fsharp中交换映射中的键和值_Dictionary_F#_Functional Programming_Swap - Fatal编程技术网

Dictionary 在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"

如何创建一个与原始贴图类似的新贴图,但在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"); ("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