私は次のように定義されている簡単な辞書を持っています:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
次に、この辞書に要素を追加します。 3 : "efg"
3 : "efg"
この既存の辞書にどのように追加できますか?
私は次のように定義されている簡単な辞書を持っています:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
次に、この辞書に要素を追加します。 3 : "efg"
3 : "efg"
この既存の辞書にどのように追加できますか?
回答:
を使用していNSDictionary
ます。何らかの理由で明示的にそのタイプである必要がない限り、Swift辞書を使用することをお勧めします。
SwiftディクショナリはNSDictionary
、余計な作業をせずに期待できる関数に渡すことができます。これはDictionary<>
、NSDictionary
シームレスに相互にブリッジするためです。ネイティブ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
は、キャストや変換を行わずにそのまま渡します。
Dictionary
オブジェクトを作成および操作し、NSDictionary
必要に応じて最後に変換します。素晴らしい。ありがとう。
あなたは次のような方法と変更使用して追加することができますDictionary
へのNSMutableDictionary
dict["key"] = "value"
Cannot assign to the result of this expression
dict["testval"] = "test"
..エラーfatal error: unexpectedly found nil while unwrapping an Optional value
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:Hola、2:Hello、3:Aloha]
dictionary[1] = "Hola"
ですか?
次の2つの辞書があるとします。
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
dic2からdic1にすべてのアイテムを追加する方法は次のとおりです。
dic2.map {
dic1[$0.0] = $0.1
}
乾杯A
.forEach
代わりに使用することをお.map
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"
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)
For whoever reading this for swift 5.1+
// 1. Using updateValue to update the given key or add new if doesn't exist
var dictionary = [Int:String]()
dictionary.updateValue("egf", forKey: 3)
// 2. Using a dictionary[key]
var dictionary = [Int:String]()
dictionary[key] = "value"
// 3. Using subscript and mutating append for the value
var dictionary = [Int:[String]]()
dictionary[key, default: ["val"]].append("value")
var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "sample@email.com"
print(dict)
これまでのところ、Swiftの高次関数の1つ、つまり「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 }
上記の構文の使用に問題がある場合は、お知らせください。
Swift 5ハッピーコーディング
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}