Collections 用F展平一张地图

Collections 用F展平一张地图,collections,f#,Collections,F#,我有以下资料: Map<Instrument, Map<PositionSide, PositionData>> 如果不手动遍历这两个贴图?恐怕这是不可能的。它有很多问题 起初,这不是2个集合,而是另一个集合中的许多集合。 映射不是为迭代而构建的,它类似于字典。但您可以先使用Map.toList将其转换为一个对列表 如果您需要所有值,那么除了迭代这些值之外没有其他可能性。 让toValuesList映射= 地图 |>托利斯特地图 |>List.map snd 设ds=

我有以下资料:

Map<Instrument, Map<PositionSide, PositionData>>

如果不手动遍历这两个贴图?

恐怕这是不可能的。它有很多问题

起初,这不是2个集合,而是另一个集合中的许多集合。 映射不是为迭代而构建的,它类似于字典。但您可以先使用Map.toList将其转换为一个对列表 如果您需要所有值,那么除了迭代这些值之外没有其他可能性。 让toValuesList映射= 地图 |>托利斯特地图 |>List.map snd 设ds= 数据 |>toValuesList |>List.collect to值列表 如果您可以通过某个键查找位置数据,那么最多可以避免迭代内部映射

让数据= 地图 |>toValuesList |>List.map fun valueMap->lookupwhithin valueMap
恐怕不可能。它有很多问题

起初,这不是2个集合,而是另一个集合中的许多集合。 映射不是为迭代而构建的,它类似于字典。但您可以先使用Map.toList将其转换为一个对列表 如果您需要所有值,那么除了迭代这些值之外没有其他可能性。 让toValuesList映射= 地图 |>托利斯特地图 |>List.map snd 设ds= 数据 |>toValuesList |>List.collect to值列表 如果您可以通过某个键查找位置数据,那么最多可以避免迭代内部映射

让数据= 地图 |>toValuesList |>List.map fun valueMap->lookupwhithin valueMap
如果我们不担心来自内部映射的重复值,可以通过将映射视为序列来实现。它们的内置GetEnumerator方法返回System.Collections.Generic.KeyValuePair类型的序列

后者可以通过F预定义的主动识别器KeyValue进行解构


如果我们不担心来自内部映射的重复值,可以通过将映射视为序列来实现。它们的内置GetEnumerator方法返回System.Collections.Generic.KeyValuePair类型的序列

后者可以通过F预定义的主动识别器KeyValue进行解构

PositionData list
Map.empty<Instrument, Map<PositionSide, PositionData>>
|> Seq.collect (fun (KeyValue(_, v)) -> v)
|> Seq.map (fun (KeyValue(_, v)) -> v)
|> Seq.toList
// val it : PositionData list = []