web-dev-qa-db-ja.com

迅速に辞書に要素を追加するにはどうすればいいですか?

私は次のように定義されている簡単な辞書を持っています:

var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]

しかし後で、この辞書に3 : "efg"という要素を追加したいと思います。

しかし、私がインターネット上でよく検索したこのアクションをどのように実行できるのか私にはわかりませんが、何も助けにはなりません。

この既存の辞書に3 : "efg"を追加するにはどうすればよいですか。

169
Dharmesh

あなたはNSDictionaryを使っています。何らかの理由で明示的にその型にする必要がない限り、Swift辞書を使用することをお勧めします。

Dictionary<>NSDictionaryはシームレスに相互に橋渡しするので、余分な作業をせずにNSDictionaryを期待する関数にSwift辞書を渡すことができます。ネイティブのSwift方式の利点は、辞書が総称型を使用することです。そのため、キーとしてIntを、値としてStringを使用して辞書を定義した場合、誤って異なるタイプのキーおよび値を使用できません。 (コンパイラはあなたに代わって型をチェックします。)

私のコードで私が見たものに基づいて、あなたの辞書はキーとしてIntを、そして値としてStringを使用します。インスタンスを作成して後でアイテムを追加するには、このコードを使用できます。

var dict = [1: "abc", 2: "cde"] // dict is of type Dictionary<Int, String>
dict[3] = "efg"

後でそれをNSDictionary型の変数に代入する必要がある場合は、明示的なキャストを行うだけです。

let nsDict = dict as! NSDictionary

そして、前述のように、NSDictionaryを期待する関数に渡したい場合は、キャストや変換を行わずにそのまま渡してください。

195
Antonio

次の方法で追加してDictionaryNSMutableDictionaryに変更することができます。

dict["key"] = "value"
90
yashwanth77

私はこれが非常に遅くなるかもしれないことを知っています、しかしそれは誰かに役に立つかもしれません。そのため、Swiftで辞書にキーと値のペアを追加するには、 updateValue(value:、forKey:) methodを次のように使用します。

var dict = [ 1 : "abc", 2 : "cde"]
dict.updateValue("efg", forKey: 3)
print(dict)
58
HeadOnn

Swift 3 - XCODE 8.1

var dictionary =  [Int:String]() 

dictionary.updateValue(value: "Hola", forKey: 1)
dictionary.updateValue(value: "Hello", forKey: 2)
dictionary.updateValue(value: "Aloha", forKey: 3)

だから、あなたの辞書は含まれています:

辞書[1:オラ、2:こんにちは、3:アロハ]

38
Cristian Mora

Swift 3+

Dictionaryに新しい値を割り当てる例です。 NSMutableDictionaryとして宣言する必要があります。

var myDictionary: NSMutableDictionary = [:]
let newValue = 1
myDictionary["newKey"] = newValue
print(myDictionary)
16
Dasoga

あなたの辞書がIntからStringまでであるならば、あなたは単にすることができます:

dict[3] = "efg"

あなたが辞書の value に要素を追加することを意味するならば、可能な解決策:

var dict = Dictionary<String, Array<Int>>()

dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
16
Alex Gidan

Swiftでは、 NSDictionary を使用している場合は、setValueを使用できます。

dict.setValue("value", forKey: "key")
12
lojals

以下の2つの辞書があるとします。

var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]

これは、 dic2 から dic1 にすべての項目を追加する方法です。

dic2.map {
   dic1[$0.0] = $0.1
}

歓声A.

10

Dict.updateValueは辞書から既存のキーの値を更新するか、キーが存在しない場合は新しい新しいキーと値のペアを追加します。

例 -

var caseStatusParams: [String: AnyObject] = ["userId" : UserDefault.userID ]
caseStatusParams.updateValue("Hello" as AnyObject, forKey: "otherNotes")

結果-

▿  : 2 elements
    - key : "userId"
    - value : 866
▿  : 2 elements
    - key : "otherNotes"
    - value : "Hello"
7
Varsha Gaikwad
var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "[email protected]"
print(dict)
2
Queen Semiramis

Dictionaryの代わりに[String:Any]を使用しているフェローの場合、以下が拡張機能です

extension Dictionary where Key == String, Value == Any {

    mutating func append(anotherDict:[String:Any]) {
        for (key, value) in anotherDict {
            self.updateValue(value, forKey: key)
        }
    }
}

ハッピーアペンド!

2
Dhaval H. Nena

今までのところ私はSwiftの高階関数の一つ、すなわち "reduce"を使って辞書にデータを追加することを発見した最良の方法です。以下のコードスニペットに従ってください。

newDictionary = oldDictionary.reduce(*newDictionary*) { r, e in var r = r; r[e.0] = e.1; return r }

@ Dharmesh あなたの場合は、

newDictionary = dict.reduce([3 : "efg"]) { r, e in var r = r; r[e.0] = e.1; return r }

上記の構文を使用する際に問題があるかどうかをお知らせください。

1
Shobhit C

設定したばかりの新しい要素を追加します。

0
Tung Tran

Swift 5では、以下のコードコレクションが機能します。

     // main dict to start with
     var myDict : Dictionary = [ 1 : "abc", 2 : "cde"]

     // dict(s) to be added to main dict
     let myDictToMergeWith : Dictionary = [ 5 : "l m n"]
     let myDictUpdated : Dictionary = [ 5 : "lmn"]
     let myDictToBeMapped : Dictionary = [ 6 : "opq"]

     myDict[3]="fgh"
     myDict.updateValue("ijk", forKey: 4)

     myDict.merge(myDictToMergeWith){(current, _) in current}
     print(myDict)

     myDict.merge(myDictUpdated){(_, new) in new}
     print(myDict)

     myDictToBeMapped.map {
         myDict[$0.0] = $0.1
     }
     print(myDict)

これも役立つことを願っています

0
Lord Anubis