কীভাবে কোনও এনএসডি অভিধানে যুক্ত করবেন


93

আমি একটি ব্যবহার করছিলাম NSMutableArrayএবং বুঝতে পেরেছিলাম যে আমি অর্জন করার চেষ্টা করছি তার জন্য অভিধান ব্যবহার করা অনেক সহজ।

আমি অভিধানে একটি NSStringএবং একটি মান হিসাবে একটি কী সংরক্ষণ করতে চাই int। এটি কিভাবে হয়? দ্বিতীয়ত, পরিবর্তনীয় এবং একটি সাধারণ অভিধানের মধ্যে পার্থক্য কী?

উত্তর:


199

একটি পরিবর্তনীয় অভিধান পরিবর্তন করা যেতে পারে, অর্থাৎ আপনি বস্তুগুলি যুক্ত এবং মুছে ফেলতে পারেন। এটি তৈরি হয়ে গেলে একটি অপরিবর্তনীয় স্থির করা হয়।

তৈরি এবং যোগ করুন:

NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:10];
[dict setObject:[NSNumber numberWithInt:42] forKey:@"A cool number"];

এবং পুনরুদ্ধার:

int myNumber = [[dict objectForKey:@"A cool number"] intValue];

আপনার কি কোনও ক্ষমতা নিয়ে উদ্যোগ নিতে হবে, না এটি কেবল গতিশীল হতে পারে?
muttley91

4
আপনাকে প্রাথমিক ক্ষমতা নির্দিষ্ট করতে হবে না তবে আপনি যদি এটি করেন তবে পারফরম্যান্স লাভও দেখতে পাবেন। এটিতে কয়টি আইটেম থাকবে তা আপনি যদি জানেন তবে এই সংখ্যাটি বা কিছুটা বড় মান দিন।
ইকো

এনএসডেটোরির জন্য জিজ্ঞাসা করছেন এনএসমিটেবলড অভিধান নয়?
অনন্ত প্রসাদ

35

সেট করে আপনি অবজেক্টের setValue:(id)value forKey:(id)keyপদ্ধতিটি ব্যবহার করবেন NSMutableDictionary:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setValue:[NSNumber numberWithInt:5] forKey:@"age"];

বা আধুনিক উদ্দেশ্য-সি:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
dict[@"age"] = @5;

পরিবর্তনীয় এবং "স্বাভাবিক" এর মধ্যে পার্থক্য হ'ল ভাল, মিউটিবিলিটি। অর্থাত আপনি বিষয়বস্তু পরিবর্তন করতে পারেন NSMutableDictionary(এবং NSMutableArray) যখন আপনি এটা করতে পার না সঙ্গে "স্বাভাবিক" NSDictionaryএবংNSArray


4
আপনি কি NSNumber এ পূর্ণসংখ্যার মোড়ানো উচিত?
জোহান কুল

এ নিয়ে আমার আরও একটি সমস্যা আছে। আমাকে স্ট্রিং হিসাবে ব্যবহারকারীর প্রবেশ করা পাঠ্য পাশাপাশি চিত্রের রেফারেন্স (চিত্রগুলির অ্যারেতে সূচক) সংরক্ষণ করতে হবে যা ব্যবহারকারী পাঠ্যটি সংরক্ষণ করছে। আমি 2 টি ভেরিয়েবলযুক্ত অবজেক্টের একটি মিউটরেবলআরে চেষ্টা করেছি, আমি কেবল উল্লিখিত প্রত্যেকটির জন্য একটি। যে অ্যারে অবজেক্টের পাঠ্য মানগুলির সাথে টেবিলভিউটি পপুলেট করার চেষ্টা করার সময় এটি ভাল কাজ করে না। সুতরাং আমি একটি অভিধানের কথা ভেবেছি, কেবল সমস্যাটি কি মনে হচ্ছে না যে আমি সূচি অনুসারে ডেটা উদ্ধার করতে পারি, এটি হ্যাশম্যাপের মতো একটি কী বা মান হওয়া উচিত?
সিস্টেম

@ জোহান - সঠিক এবং আপডেট! @ আলজারি - হ্যাঁ, অভিধানটি হ'ল মূল ধরণের স্টোর। আমি মনে করি আপনার অবস্থানে আপনি অভিধানের অ্যারের সাথে আরও ভাল হবেন। এরকম কিছু[{image: "/path/to/img/1.jpg", data: "foo bar 1"}, {image: "/path/to/img/2.jpg", data: "foo bar 2"}, ..., {image: "/path/to/img/N.jpg", data: "foo bar N"}]
এএম্যান্টাস

এটি এখনও আমার পক্ষে কাজ করবে না, কারণ প্রতিটি আইটেম থেকে আমার পাঠ্য পুনরুদ্ধার করা প্রয়োজন এবং পছন্দসই ইউআইটিবেবল ভিউ পূরণ করতে ব্যবহার করতে হবে পাশাপাশি চিত্রের অ্যারেতে আমার একটি সূচী রেফারেন্সও প্রয়োজন যাতে আমি নির্বাচিত পছন্দসই চিত্রটি পুনরুদ্ধার করতে এবং প্রদর্শন করতে পারি। আমি উপরে বর্ণিত অবজেক্টটি চেষ্টা করেছিলাম, কিন্তু অ্যারে থেকে পড়ার সময় প্রত্যাবর্তিত বস্তুগুলি যেখানে নির্দিষ্ট কারণের জন্য এনএসএসআরটিংস নির্দিষ্ট কারণে সংরক্ষণ করা হয়েছিল। আমি এখানে কী করব তা নিশ্চিত নই
সিস্টেম

আমি ভাবছি যে আমাকে কেবল ""% d _% @, ইনডেক্স, সেভড টাইটল জাতীয় এনএসএসআরটিংগুলি সঞ্চয় করতে হবে এবং তারপরে কেবল এনএসএসআরটি বিভক্ত করুন এবং যা যা প্রয়োজন তা গ্রহণ করুন এবং ডিপাই করুন ava আমি জাভা শর্তে ভাবছি, অবশ্যই একটি অবশ্যই থাকতে হবে বিভক্ত ফাংশন এজেজে সি। :)
সিস্টেম

16

যখনই অ্যারে ঘোষণা করা হয়, তারপরে কেবল আমাদের এনএসডিকোয়ারের মতোই কী-মানটি যুক্ত করতে হবে

NSDictionary *normalDict = [[NSDictionary alloc]initWithObjectsAndKeys:@"Value1",@"Key1",@"Value2",@"Key2",@"Value3",@"Key3",nil];

আমরা এই এনএসডি অভিধানে মূল মানগুলি যুক্ত করতে বা অপসারণ করতে পারি না

NSMutableD शब्दकोषের মতো আমরাও এই পদ্ধতিটি ব্যবহার করে অ্যারের অন্তর্নিবেশনের পরে অবজেক্টগুলি যুক্ত করতে পারি

NSMutableDictionary *mutableDict = [[NSMutableDictionary alloc]init];'
[mutableDict setObject:@"Value1" forKey:@"Key1"];
[mutableDict setObject:@"Value2" forKey:@"Key2"];
[mutableDict setObject:@"Value3" forKey:@"Key3"];

মূল মানটি সরানোর জন্য আমাদের নিম্নলিখিত কোডটি ব্যবহার করতে হবে

[mutableDict removeObject:@"Value1" forKey:@"Key1"];

12

নতুন হালনাগাদ

উদ্দেশ্য গ

সৃষ্টি:

NSDictionary *dictionary = @{@"myKey1": @7, @"myKey2": @5}; 

পরিবর্তন:

NSMutableDictionary *mutableDictionary = [dictionary mutableCopy];     //Make the dictionary mutable to change/add
mutableDictionary[@"myKey3"] = @3;

সংক্ষিপ্ত হাত সিনট্যাক্স বলা হয় Objective-C Literals

সুইফট

সৃষ্টি:

var dictionary = ["myKey1": 7, "myKey2": 5]

পরিবর্তন:

dictionary["myKey3"] = 3

1

আপনি জিজ্ঞাসা করতে চান "একটি পরিবর্তনীয় এবং নন-মিউটয়েবল অ্যারে বা অভিধানের মধ্যে পার্থক্য কী" " আপনি ইতিমধ্যে জানেন যে জিনিসগুলি বর্ণনা করতে বিভিন্ন সময় বিভিন্ন পদ ব্যবহার করা হয়। এই ক্ষেত্রে, আপনি "পরিবর্তনশীল" শব্দটি "গতিশীল" এর সাথে প্রতিস্থাপন করতে পারেন। সুতরাং, একটি পরিবর্তনীয় অভিধান বা অ্যারেটি হ'ল "গতিশীল" এবং রানটাইমে পরিবর্তন হতে পারে, অন্যদিকে একটি অ-পরিবর্তনীয় অভিধান বা অ্যারে এমন একটি যা "স্ট্যাটিক" এবং আপনার কোডে সংজ্ঞায়িত হয় এবং রানটাইমে পরিবর্তিত হয় না (অন্য কথায়) , আপনি উপাদানগুলি যুক্ত, মুছতে বা বাছাই করতে পারবেন না))

এটি কীভাবে সম্পন্ন হয়েছে তা হিসাবে আপনি আমাদের এখানে ডকুমেন্টেশনগুলি পুনরাবৃত্তি করতে বলছেন। আপনাকে কী করতে হবে তা হ'ল নমুনা কোড এবং এক্সকোড ডকুমেন্টেশন অনুসন্ধান করা যা এটি ঠিক কীভাবে হয় তা দেখতে। আমি যখন প্রথম শিখছিলাম তখন পরিবর্তনীয় জিনিসটি আমাকেও ছুঁড়ে ফেলেছিল, তাই আমি আপনাকে এটি উপহার দেব!


কখনও কখনও এক্সকোড ডক্স সম্পর্কে একটি শালীন যথেষ্ট ব্যাখ্যা নেই, এটি স্পষ্ট উদাহরণ ছাড়াই গভীর তত্ত্বে পরিণত হয়, সবসময় নয়, কখনও কখনও। : পি হ্যাঁ আমি পার্শ্বচরিত (পরিবর্তন করতে সক্ষম) অংশটি এখন ধন্যবাদ জানি। :)
সিস্টেম

1

রেফারেন্সের জন্য, আপনি আক্ষরিক সাথে initWithDictionaryআরম্ভ করতে ব্যবহার করতে পারেন NSMutableDictionary:

NSMutableDictionary buttons = [[NSMutableDictionary alloc] initWithDictionary: @{
    @"touch": @0,
    @"app": @0,
    @"back": @0,
    @"volup": @0,
    @"voldown": @0
}];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.