मेरे पास एक सरल शब्दकोश है जिसे इस तरह परिभाषित किया गया है:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
अब मैं इस शब्दकोश में एक तत्व जोड़ना चाहता हूं: 3 : "efg"
मैं 3 : "efg"
इस मौजूदा डिक्शनरी में कैसे शामिल हो सकता हूं ?
मेरे पास एक सरल शब्दकोश है जिसे इस तरह परिभाषित किया गया है:
var dict : NSDictionary = [ 1 : "abc", 2 : "cde"]
अब मैं इस शब्दकोश में एक तत्व जोड़ना चाहता हूं: 3 : "efg"
मैं 3 : "efg"
इस मौजूदा डिक्शनरी में कैसे शामिल हो सकता हूं ?
जवाबों:
आप उपयोग कर रहे हैं 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
ज़रूरत पड़ने पर उसे अंत में परिवर्तित करना। आश्चर्यजनक। धन्यवाद।
"Antonio"
लिए 1
तो dic[1]
वापस आ जाएगी "abc, Antonio"
।
आप निम्नलिखित तरीके और परिवर्तन का उपयोग कर जोड़ सकते हैं 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
मुझे पता है कि यह बहुत देर से आ सकता है, लेकिन यह किसी के लिए उपयोगी साबित हो सकता है। तो स्विफ्ट में शब्दकोशों के लिए महत्वपूर्ण मान जोड़े बनाने के लिए, आप अपडेट का उपयोग कर सकते हैं (मान:, forKey:) विधि इस प्रकार है:
var dict = [ 1 : "abc", 2 : "cde"]
dict.updateValue("efg", forKey: 3)
print(dict)
स्विफ्ट 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)
तो, आपके शब्दकोश में शामिल हैं:
शब्दकोश [१: होला, २: नमस्कार, ३: अलोहा]
dictionary[1] = "Hola"
?
यदि आपका शब्दकोश है Int
तो String
आप बस कर सकते हैं:
dict[3] = "efg"
यदि आप इसका मतलब है कि एक संभव समाधान शब्दकोश के मूल्य में तत्वों को जोड़ना :
var dict = Dictionary<String, Array<Int>>()
dict["key"]! += [1]
dict["key"]!.append(1)
dict["key"]?.append(1)
स्विफ्ट में, यदि आप एनएसडॉर का उपयोग कर रहे हैं, तो आप उपयोग कर सकते हैं 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"
नीचे के [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)
}
}
}
स्विफ्ट 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)
शब्दकोश में डेटा को जोड़ने के लिए कोई फ़ंक्शन नहीं है। आप मौजूदा शब्दकोश में नई कुंजी के खिलाफ मूल्य प्रदान करते हैं। यह स्वचालित रूप से शब्दकोश में मूल्य जोड़ देगा।
var param = ["Name":"Aloha","user" : "Aloha 2"]
param["questions"] = "Are you mine?"
print(param)
आउटपुट जैसा होगा
["नाम": "अलोहा", "उपयोगकर्ता": "अलोहा २", "प्रश्न": "" क्या तुम मेरे हो?]
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)
नए तत्वों को जोड़ने के लिए बस सेट करें:
listParrameters["your parrameter"] = value
अब तक मैंने स्विफ्ट के उच्चतर कार्यों में से एक का उपयोग करके शब्दकोश में डेटा को जोड़ने का सबसे अच्छा तरीका पाया है, "कम"। नीचे कोड स्निपेट का पालन करें:
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 }
कृपया मुझे बताएं कि क्या आपको सिंटैक्स के उपयोग में कोई समस्या मिलती है।
मैंने डिक्शनरी एक्सटेंशन जोड़ा
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) }
यदि आप एनएसडी को संशोधित या अद्यतन करना चाहते हैं तो सबसे पहले इसे एनएसमुटिबल के रूप में टाइपकास्ट करें
let newdictionary = NSDictionary as NSMutableDictionary
तो बस उपयोग करें
newdictionary.setValue(value: AnyObject?, forKey: String)