स्विफ्ट में तत्वों को एक शब्दकोश में कैसे जोड़ा जाए?


217

मेरे पास एक सरल शब्दकोश है जिसे इस तरह परिभाषित किया गया है:

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

अब मैं इस शब्दकोश में एक तत्व जोड़ना चाहता हूं: 3 : "efg"

मैं 3 : "efg"इस मौजूदा डिक्शनरी में कैसे शामिल हो सकता हूं ?



1
क्या आप सुनिश्चित हैं कि आप एक शब्दकोश चाहते हैं और एक सरणी नहीं, क्योंकि आपकी कुंजी संख्या 1, 2 और 3 है?
gnasher729

जवाबों:


240

आप उपयोग कर रहे हैं NSDictionary । जब तक आपको स्पष्ट रूप से किसी कारण के लिए उस प्रकार की आवश्यकता नहीं होती है, मैं एक स्विफ्ट शब्दकोश का उपयोग करने की सलाह देता हूं।

आप NSDictionaryबिना किसी अतिरिक्त कार्य के अपेक्षा किसी भी फ़ंक्शन के लिए एक स्विफ्ट शब्दकोश पारित कर सकते हैं , क्योंकि Dictionary<>और NSDictionaryमूल रूप से एक दूसरे को पुल करते हैं। देशी स्विफ्ट तरीके का लाभ यह है कि शब्दकोश सामान्य प्रकार का उपयोग करता है, इसलिए यदि आप इसे परिभाषित करते हैं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ज़रूरत पड़ने पर उसे अंत में परिवर्तित करना। आश्चर्यजनक। धन्यवाद।
जोशुआ पिंटर

वहाँ वैसे भी है कि मैं एक सीमांकक ( addValue के समान ) का उपयोग कर एक ही कुंजी के लिए संलग्न कर सकते हैं । मेरा मतलब है कि एक कुंजी जोड़ने के"Antonio" लिए 1तो dic[1]वापस आ जाएगी "abc, Antonio"
हनी

@ यह नहीं है कि मैं इसके बारे में पता नहीं हूँ ... लेकिन अगर तत्व पहले से मौजूद है तो यह एक सरल उपाधि है
एंटोनियो

113

आप निम्नलिखित तरीके और परिवर्तन का उपयोग कर जोड़ सकते हैं Dictionaryकरने के लिएNSMutableDictionary

dict["key"] = "value"

2
मुझे एक त्रुटि मिली जो कहती हैCannot assign to the result of this expression
धर्मेश खेनी

अपने प्रश्न के लिए इस तरह जोड़ें तानाशाही [3] = "एफईजीजी";
यशवंत y

मेरे संपादित जवाब की जाँच करें। मुझे इसके लिए काम करना है। एक शब्दकोश में काम करने के लिए शब्दकोश में बदलें।
यशवंत y

1
dict["testval"] = "test".. त्रुटिfatal error: unexpectedly found nil while unwrapping an Optional value
jose920405

2
यह 2.2+ के साथ काम नहीं करेगा, इस अभिव्यक्ति में
तानाशाह आसानी से पढ़ता है

67

मुझे पता है कि यह बहुत देर से आ सकता है, लेकिन यह किसी के लिए उपयोगी साबित हो सकता है। तो स्विफ्ट में शब्दकोशों के लिए महत्वपूर्ण मान जोड़े बनाने के लिए, आप अपडेट का उपयोग कर सकते हैं (मान:, 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)

तो, आपके शब्दकोश में शामिल हैं:

शब्दकोश [१: होला, २: नमस्कार, ३: अलोहा]


3
यह कैसे से बेहतर है dictionary[1] = "Hola"?
बेन लेगिएरियो

बस इसे करने का एक और तरीका है। आप क्या करने की जरूरत है सब निर्भर करते हैं! मैं अपना मामला, यह सबसे अच्छा तरीका है
क्रिस्टियन मोरा

4
मैं समझता हूं कि आपको लगता है कि यह बेहतर है; इसलिए आपने इसे पोस्ट किया है। लेकिन मैं नहीं देखता कि यह कैसे बेहतर है। कृपया, मुझे बताएं कि यह कैसे बेहतर है
बेन लेगिएरियो

मैं मानता हूं कि "addValue" या "setValue" नामक एक विधि होनी चाहिए, कि "updateValue" को UPDATING के लिए उपयोग किया जाना चाहिए क्योंकि इसका नाम कहता है
pkarc

इसका कारण यह है कि जब डिक्शनरी में init होना एक वैल्यू [] है जो nil के लिए अलग है, इसलिए आवश्यक है कि प्रॉपर्टी अपडेटValue का उपयोग करें क्योंकि हम वैल्यू बदलने की कोशिश कर रहे हैं और इसे सम्मिलित नहीं कर रहे हैं।
क्रिस्टियन मोरा

16

यदि आपका शब्दकोश है Intतो Stringआप बस कर सकते हैं:

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

स्विफ्ट में, यदि आप एनएसडॉर का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं setValue:

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

1
भविष्य में अपने उत्तर को संपादित करें, भविष्य में डाउनवोट्स से बचने के लिए अधिक जानकारी जोड़ने पर विचार करें।
जुआन बोएरो

11

नीचे दिए गए दो शब्दकोशों दिए गए हैं:

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

आप निम्न तरीके से सभी आइटम जोड़ सकते हैं dic2 को dic1 :

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

स्विफ्ट 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)

आउटपुट जैसा होगा

["नाम": "अलोहा", "उपयोगकर्ता": "अलोहा २", "प्रश्न": "" क्या तुम मेरे हो?]


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
कृपया कुछ जानकारी प्रदान करें कि यह समस्या क्यों हल करती है
स्टीफन रिंडल

@StephenReindl यदि आप इसे चलाते हैं, तो आप देखेंगे;)
बेन लेगिएरियो


0

अब तक मैंने स्विफ्ट के उच्चतर कार्यों में से एक का उपयोग करके शब्दकोश में डेटा को जोड़ने का सबसे अच्छा तरीका पाया है, "कम"। नीचे कोड स्निपेट का पालन करें:

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

@ धर्मेश आपके मामले में,

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

यदि आप एनएसडी को संशोधित या अद्यतन करना चाहते हैं तो सबसे पहले इसे एनएसमुटिबल के रूप में टाइपकास्ट करें

let newdictionary = NSDictionary as NSMutableDictionary

तो बस उपयोग करें

 newdictionary.setValue(value: AnyObject?, forKey: String)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.