如何通过F#中的键将两个地图相交?

dam*_*boy 4 f# dictionary functional-programming intersect

我想将具有公共密钥的两个F#地图集成到一个Map中,该Map具有公共密钥和两个值的元组作为其值.

即签名是这样的:

Map<K, T1> -> Map<K, T2> -> Map<K, T1 * T2>
Run Code Online (Sandbox Code Playgroud)

有任何简单实用且高效的方法吗?

我知道我可以将各组键交叉,然后构建一个新的地图,我只想做一些不那么脏的事情......

Gus*_*Gus 7

之前我遇到过类似的问题,最后解决了这个问题:

let intersect a b = Map (seq {
    for KeyValue(k, va) in a do
        match Map.tryFind k b with
        | Some vb -> yield k, (va, vb)
        | None    -> () })
Run Code Online (Sandbox Code Playgroud)