在 fsharp 的映射中交换键和值
Swap key and value in a map in fsharp
如何在 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"
打印:
map [("A", "1"); ("B", "2"); ("C", "3")]
map [("1", "A"); ("2", "B"); ("3", "C")]
Link: http://ideone.com/cfN2yH
您可以将它转换为列表并返回,调用一个函数在中间进行交换。
let swap (x, y) = y, x
let swapAll tuples = List.map swap tuples
let invert map = map |> Map.toList |> swapAll |> Map.ofList
这种方法在某种程度上突出了函数式编程的好处——您可以通过组合小的构建块来构建复杂的行为。
如何在 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"
打印:
map [("A", "1"); ("B", "2"); ("C", "3")]
map [("1", "A"); ("2", "B"); ("3", "C")]
Link: http://ideone.com/cfN2yH
您可以将它转换为列表并返回,调用一个函数在中间进行交换。
let swap (x, y) = y, x
let swapAll tuples = List.map swap tuples
let invert map = map |> Map.toList |> swapAll |> Map.ofList
这种方法在某种程度上突出了函数式编程的好处——您可以通过组合小的构建块来构建复杂的行为。