построить список из карты с помощью функции Map.iter в F # - PullRequest
0 голосов
/ 16 декабря 2011

У меня есть следующие типы:

type ColorCounter = 
    {

        Count : int
        Color : Microsoft.Xna.Framework.Color 

    }

let AvailableColors : Map<uint32,ColorCounter> = .....

Я хотел бы перебрать карту и вернуть список.Я написал следующую функцию, которая не компилируется:

let AvailableColorList(map : Map<uint32,ColorCounter>) : List<Microsoft.Xna.Framework.Color> = 
     let colorSeq = seq {

        map |> Map.iter (fun key col -> yield col.Color)  
     }
     colorSeq |> Seq.toList

Я предполагаю, что я делаю что-то не так с синтаксисом функции, переданной ей, но я не нашел подходящего примера, который показывает мнекак это сделать.

Кто-нибудь может мне помочь? В чем моя ошибка?Как я могу исправить код выше?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011
let AvailableColors : Map<uint32,ColorCounter> = Map.empty
let colors = [ for (KeyValue(_, v)) in AvailableColors -> v ]
1 голос
/ 16 декабря 2011

Я думаю, вы хотите это

let AvailableColorList(map : Map<uint32,ColorCounter>) = 
    ResizeArray(map |> Seq.map (fun (KeyValue(_, col)) -> col.Color))

Вы смешиваете понимание последовательности и карту, которые представляют собой два разных способа сделать одно и то же.

Вы также можете написать это так

let AvailableColorList(map : Map<uint32,ColorCounter>) = 
    ResizeArray([ for KeyValue(_, col) in map -> col.Color ])
...