2010-11-26 4 views
8

私は機能的な方法で辞書を作成しようとしています。私はそれを少しを果たし、このコードで2つの辞書を連結することができました:不変の辞書で作業する

let d1 = dict [(1, "one"); (2, "two")] 
let d2 = dict [(4, "four")] 
let d = List.ofSeq d1 @ List.ofSeq d2 

これはF#で不変の辞書での作業の正しい方法は何ですか?それは少し複雑に思えます。

答えて

20

dictの機能は、すべての項目を含むリストが既にある場合は、リストから辞書を作成するヘルパーです。要素を追加したい場合、つまり元の要素のすべての要素といくつかの新しい要素を含む新しい辞書を作成する場合には、それほど有用ではありません。

この場合、Mapタイプを使用する方が良いです。あなたはおそらく書くと、m2m1のすべての要素を追加するには

// Create map from a list 
let m1 = Map.ofSeq [ (1, "one"); (2, "two") ] 
// Create map from original map by adding one element 
let m2 = m1.Add(4, "four") 

let newM2 = m1 |> Seq.fold (fun m (KeyValue(k, v)) -> Map.add k v m) m2 
+0

あなたが同時辞書を使用したい場合はどう?地図はそれを置き換えることができますか?私は新しい要素を追加するたびに新しい辞書を返すので、Mapは少し遅いだろうと思いますか? – Kafo

関連する問題