13

(簡略化された)ようなリストが与えられた場合:

type foo(n:string,m:string,l:string) = 
    member f.name=n
    member f.val1=m
    member f.val2=l
let dates = [
    foo("a","aa","aaa")
    foo("b","bb","bbb")
]

フォームの不変の辞書タイプの構造 (たとえば、Map、IDictionary... など) はどのkey:foo.name,value:fooように作成できますか?

私の最良の推測は

let fooDict = for f in foo do yield f.name,f

しかし、その for-comprehension 構文は、リスト、配列、または seq を作成するためにのみ使用できますか?

4

3 に答える 3

19

不変の辞書を作成するには(インターフェイスは変更可能ですが、変更しようとすると例外がスローされます)

[ for f in dates -> f.name,f ] |> dict

また

dates |> Seq.map (fun f -> f.name, f) |> dict


不変のマップを作成するには:

[ for f in dates -> f.name,f ] |> Map.ofSeq

また

dates |> Seq.map (fun f -> f.name, f) |> Map.ofSeq
于 2013-03-06T22:12:17.153 に答える
4

私はより冗長な(そしてパイプを知らない)ことになりました:

Map.ofList([for f in foo do yield (f.name,f)])
于 2013-03-06T22:15:03.990 に答える
3

関数を確認してくださいdict。キーと値のタプルのシーケンスを取り、それらから不変の辞書を作成します。

あなたが提供したようなリストを使用Seq.mapして、シーケンスを作成し、それを にパイプすることができますdict

于 2013-03-06T22:01:30.777 に答える