আমার একটি সাধারণ অভিধান রয়েছে যা সংজ্ঞায়িত হয়:
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
কোনও castালাই বা রূপান্তর ছাড়াই এটি পাস করুন।
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
আমি জানি এটি খুব দেরিতে আসতে পারে তবে এটি কারও পক্ষে কার্যকর প্রমাণিত হতে পারে। তাই দ্রুতগতিতে অভিধানে মূল মান জোড় যুক্ত করার জন্য আপনি আপডেটভ্যালু (মান:, ফোরকি:) পদ্ধতিটি নিম্নরূপ ব্যবহার করতে পারেন :
var dict = [ 1 : "abc", 2 : "cde"]
dict.updateValue("efg", forKey: 3)
print(dict)
সুইফট 3 - এক্সকোড 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: হোলা, 2: হ্যালো, 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)
আউটপুট মত হবে
["নাম": "আলো", "ব্যবহারকারী": "আলো 2", "প্রশ্ন": "" আপনি কি আমার "?"]
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)
এখন অবধি আমি সুইফটের উচ্চতর অর্ডার ফাংশনগুলির একটিতে "হ্রাস" ব্যবহার করে একটি অভিধানে ডেটা যুক্ত করার সেরা উপায়টি খুঁজে পেয়েছি। নীচে কোড স্নিপেট অনুসরণ করুন:
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 }
আপনি যদি উপরের সিনট্যাক্সটি ব্যবহার করতে কোনও সমস্যা পান তবে আমাকে জানান।
সুইফট 5 হ্যাপি কোডিং
var tempDicData = NSMutableDictionary()
for temp in answerList {
tempDicData.setValue("your value", forKey: "your key")
}
আমি অভিধান এক্সটেনশন যুক্ত করেছি
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)