2011-12-15 22 views
0

にMap.iter機能により地図からリストを作成:は、私は次のタイプを持っているのF#

type ColorCounter = 
    { 

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

    } 

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

私は地図を反復処理し、リストを返すようにしたいと思います。私はITERに渡された関数の構文と間違って何かをやっていると思います

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 

が、私は私がどのように示して任意の適切な例を見つけていませんでした:私はコンパイルされません。次の関数を書きましたそれを行う。

誰でも助けてもらえますか?私のエラーは何ですか?上記のコードをどうすれば修正できますか?

答えて

1

は、私はあなたが同じことをやって、2つの方法があるシーケンスの理解とマップを、混合している。この

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 ]) 
+0

答えに感謝し、それを書くことができます。しかし、List としてAvailableColorListの戻り値の型を指定すると、なぜコンパイルされないのかまだ分かりません。 – Heisenbug

+0

実際、List ではなく、(ColorCounter-> Microsoft.Xna.Framework.Color)のリストを返すようです。私が間違っている? – Heisenbug

+0

'System.Collection.Generic.List '(F#で 'ResizeArray 'とエイリアス)したい場合、 'ResizeArray([Map内のKeyValue(_、col)の場合 - > col.Color]) ' – Daniel

1
let AvailableColors : Map<uint32,ColorCounter> = Map.empty 
let colors = [ for (KeyValue(_, v)) in AvailableColors -> v ] 
関連する問題