ネストされたディクショナリMap<'a,Map<'b,'T>>
があるため、 の組み合わせのa*b
エントリは一意です。
効率的に事前計算するには、キーを反転する必要がありますMap<'b,Map<'a,'T>>
私は仕事をするいくつかの高次の方法を持っています(同じように|/>
ネストされたシーケンスで操作を適用します|//>
が、2レベルの深さで、|*>
ネストされたシーケンスのデカルト積を列挙します)、これを行うためのより良い方法があるかどうか疑問に思っています、これで共有する美しいコードがある場合に備えて。
let reversenmap (x:Map<'a,Map<'b,'T>>) :Map<'b,Map<'a,'T>> =
let ret = x |> Map.toSeq |/> Map.toSeq |*> squash12
let ret2 = ret |> Seq.groupByn2 (fun (a,b,t) -> b)
(fun (a,b,t) -> a) |//> Seq.head
|//> (fun (a,b,c) -> c)
ret2 |> Seq.toMapn2