2017-03-06 17 views
2

のすべての値は、私がtrueにすべての辞書の値をリセットする機能を作成したい、この構造更新辞書

var profiles: Dictionary<String, Bool> = ["open": true, "encrypted": false, "sound":true, "picture":false] 

と辞書を持っています。それを行うための短い方法はありますか、それをループして値を1つずつ変更する必要がありますか?あなたのための

+0

あなたは構造体を使用していない理由は? – BallpointBen

答えて

3

簡単ワンライナー:

profiles.keys.forEach { profiles[$0] = true } 

この辞書の全てのキーを反復処理し、trueにそのキーの値を設定します。 $0forEachクロージャ(キー)の最初の引数を表します。ループしないで、すべての値を単一の値に変更する方法はありません。

+1

や 'profiles.keys {プロファイル偽= [キー]}'でのキーのための - だけ少し長いが、読みやすく:) –

+0

、それはまた、クロージャを作成回避@MartinR、パフォーマンスが – Alnitak

1
dictionary.forEach({ (key, value) -> Void in 
    dictionary[key] = true     
}) 

また別のアプローチです。この場合にのみ更新されなければならないこれらの辞書のエントリを更新..

dictionary.filter({ $0.value == false }) 
    .forEach({ (key, _) -> Void in 
       dictionary[key] = true    
}) 
+0

は、この生成されませんメリットがあり未使用の 'value'パラメータの警告? – Alnitak

+2

あなたは列挙() ''ここで使用する必要はありません。 in' forループ 'シンプル一度に両方を行うことができます - - '(キー、値)のために '値{= trueのプロフィール[キー]}プロファイルで!のもfilter'と' forEach'は 'のための必要はありません。 – Hamish

+0

あなたは正しい@Hamishです。 ) – Adolfo

0

この特定の猫を肌には多くの方法がありますが...

profiles.forEach { profiles[$0.0] = true }