다음과 같이 정의 된 간단한 사전이 있습니다.
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
이제이 사전에 요소를 추가하고 싶습니다. 3 : "efg"
3 : "efg"
이 기존 사전에 어떻게 추가 할 수 있습니까?
다음과 같이 정의 된 간단한 사전이 있습니다.
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
이제이 사전에 요소를 추가하고 싶습니다. 3 : "efg"
3 : "efg"
이 기존 사전에 어떻게 추가 할 수 있습니까?
답변:
을 사용하고 NSDictionary
있습니다. 어떤 이유로 든 명시 적으로 해당 유형이어야하는 경우가 아니라면 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
스위프트 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"
습니까?
Swift에서 NSDictionary 를 사용하는 경우 다음을 사용할 수 있습니다 setValue
.
dict.setValue("value", forKey: "key")
아래와 같이 두 개의 사전이 제공됩니다.
var dic1 = ["a": 1, "c": 2]
var dic2 = ["e": 3, "f": 4]
여기에서 모든 항목을 추가하는 방법입니다 dic2 에 dic1 :
dic2.map {
dic1[$0.0] = $0.1
}
건배
.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의 고차 함수 (예 : "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 }
위 구문을 사용하는 데 문제가 있으면 알려주십시오.