Swift에서 사전에 요소를 추가하는 방법은 무엇입니까?


217

다음과 같이 정의 된 간단한 사전이 있습니다.

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

이제이 사전에 요소를 추가하고 싶습니다. 3 : "efg"

3 : "efg"이 기존 사전에 어떻게 추가 할 수 있습니까?


NSMutableDictionary 사용
Saurabh Prajapati

1
키가 숫자 1, 2 및 3 인 것처럼 보이기 때문에 배열이 아니라 사전을 원하십니까?
gnasher729

답변:


240

을 사용하고 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에 전달하려면 캐스트 또는 변환없이 그대로 전달하십시오.


사람이 실제로해야 할 일에 대한 적절한 설명에 감사드립니다. Swift의 편의성을 활용하여 Dictionary객체 를 생성하고 조작 한 다음 NSDictionary필요할 경우 마지막에 변환합니다 . 훌륭한. 감사.
Joshua Pinter

어쨌든 구분 기호를 사용하여 동일한 키에 추가 할 수 있습니까 ( addValue 와 유사 ). 나는 키를 추가 하는 것을 의미 하므로 반환 합니다. "Antonio"1dic[1]"abc, Antonio"
Honey

@honey 내가 아는 것은 아니지만 ... 요소가 이미 존재하면 간단한 추가 사항입니다.
Antonio

113

다음과 같은 방법으로 추가하고 다음으로 변경할 Dictionary수 있습니다NSMutableDictionary

dict["key"] = "value"

2
나는라는 오류가있어Cannot assign to the result of this expression
다르 메쉬 Kheni

질문에 이런 식으로 추가하십시오 dict [3] = "efg";
yashwanth77

내 편집 된 답변을 확인하십시오. me.change 사전을 Mutable 하나로 변경하십시오!
yashwanth77 '12

1
dict["testval"] = "test".. 오류fatal error: unexpectedly found nil while unwrapping an Optional value
jose920405

2
2.2 이상에서는 작동하지 않습니다. dict은 그 표현에서 읽기 전용입니다.
jeveloper

67

나는 이것이 매우 늦게 올지 알고 있지만 누군가에게 유용 할 수 있습니다. 따라서 키 값 쌍을 사전에 사전에 추가하려면 다음과 같이 updateValue (value :, forKey :) 메소드를 사용할 수 있습니다.

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

49

스위프트 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]


3
이 방법이 어떻게 낫 dictionary[1] = "Hola"습니까?
Ben Leggiero

단순히 다른 방법입니다. 당신은 무엇을해야하는지에 달려 있습니다! 나는 나의 경우, 이것이 최선의 방법이다
Cristian Mora

4
나는 이것이 더 낫다고 생각한다는 것을 이해합니다. 당신이 그것을 게시 한 이유입니다. 그러나 이것이 어떻게 더 좋은지 모르겠습니다. 제발,이게 더
좋은지 말해줘

나는 그 이름이 말하는 것처럼 "updateValue에"이 업데이트를 사용하는 것을 "addValue"또는 "setValue의"라는 방법이 있어야 동의
pkarc

그 이유는 딕셔너리가 초기화 될 때 nil과 다른 값 []을 가지기 때문에 값을 변경하고 삽입하지 않기 때문에 updateValue 속성을 사용해야합니다.
Cristian Mora

16

당신의 사전 인 경우 IntString당신은 간단하게 할 수 있습니다 :

dict[3] = "efg"

사전 의 에 요소를 추가하려는 경우 가능한 해결책은 다음과 같습니다.

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

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

16

스위프트 3+

사전에 새 값을 할당하는 예입니다. 이를 NSMutableDictionary로 선언해야합니다.

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

12

Swift에서 NSDictionary 를 사용하는 경우 다음을 사용할 수 있습니다 setValue.

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

1
답을 수정했습니다. 나중에 다운 보트를 피하기 위해 더 많은 정보를 추가하는 것이 좋습니다.
Juan Boero 2019

11

아래와 같이 두 개의 사전이 제공됩니다.

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

여기에서 모든 항목을 추가하는 방법입니다 dic2dic1 :

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

건배


9
그것은 사용하는 것이 좋습니다 .forEach대신에 .map우리가 어떤 반환 매핑 배열이 필요하지 않는 한
haik.ampardjian

9

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

아래 [String:Any]대신에 사용하는 동료에게는 Dictionary확장이 있습니다.

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

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

4

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)

4

사전에 데이터를 추가하는 기능이 없습니다. 기존 사전의 새 키에 대해 값을 지정하기 만하면됩니다. 사전에 값을 자동으로 추가합니다.

var param  = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)

출력은 다음과 같습니다

[ "이름": "Aloha", "user": "Aloha 2", "질문": ""내가 있습니까? "]


3
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")

2
var dict = ["name": "Samira", "surname": "Sami"]
// Add a new enter code herekey with a value
dict["email"] = "sample@email.com"
print(dict)

1
이 답변으로 문제가 해결되는 이유를 알려주세요.
Stephen Reindl

@StephenReindl 당신이 그것을 실행하면, 당신은 볼 것이다;)
벤 Leggiero

1

새 요소를 추가하려면 설정하십시오.

listParrameters["your parrameter"] = value

0

지금까지 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 }

위 구문을 사용하는 데 문제가 있으면 알려주십시오.


0

스위프트 5 해피 코딩

var tempDicData = NSMutableDictionary()

for temp in answerList {
    tempDicData.setValue("your value", forKey: "your key")
}

-1

사전 확장을 추가했습니다

extension Dictionary {   
  func cloneWith(_ dict: [Key: Value]) -> [Key: Value] {
    var result = self
    dict.forEach { key, value in result[key] = value }
    return result  
  }
}

cloneWith이처럼 사용할 수 있습니다

 newDictionary = dict.reduce([3 : "efg"]) { r, e in r.cloneWith(e) }

-10

NSDictionary를 수정하거나 업데이트하려면 먼저 모든 유형 캐스트를 NSMutableDictionary로 캐스트하십시오.

let newdictionary = NSDictionary as NSMutableDictionary

그런 다음 간단히

 newdictionary.setValue(value: AnyObject?, forKey: String)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.