系列 iOS開發 NSDictionary

2021-09-11 17:12:14 字數 4163 閱讀 7006

#系列:ios開發-nsdictionary

繼續介紹oc中的另外一種資料型別 字典:nsdictionary

首先nsdictionary和陣列是差不多的 區別是陣列的每一項就是每一下,但是字典的每一項是兩個東西key和value 這兩個是一一對應的,即key:value的形式 另外字典裡面只能儲存object型別的,基礎型別的資料是不能存的,比如乙個int型的資料 我們就可以給它做轉換,轉成nsstring或者nsnumber才能儲存

接下來我們進到這個類裡面看看

也證實我剛才說的他和nsarray是相似的, 因為這個類在定義的時候就引用了nsarray和nsset...

所以我們可以把它也看成是乙個特殊的陣列.當然這樣說也太簡單了....大家理解就行 繼續向下看, 我們看看他的方法等

首先是建立

//建立

nsdictionary *dict1 = @;

nslog(@"dict1 = %@",dict1);

nsdictionary *dict2 = [[nsdictionary alloc]init];

nslog(@"dict2 = %@",dict2);

nsdictionary *dict3 = [[nsdictionary alloc]initwithdictionary:dict1];

nslog(@"dict3 = %@",dict3);

nsdictionary *dict4 = [[nsdictionary alloc]initwithobjectsandkeys:@"value4",@"key4",@"value44",@"key44", nil];

nslog(@"dict4 = %@",dict4);

nsdictionary *dict5 = [[nsdictionary alloc]initwithobjects:@[@"value5",@"value55"] forkeys:@[@"key5",@"key55"]];

nslog(@"dict5 = %@",dict5);

nsdictionary *dict6 = [nsdictionary dictionarywithdictionary:dict1];

nslog(@"dict6 = %@",dict6);

nsdictionary *dict7 = [nsdictionary dictionarywithobjectsandkeys:@"value7",@"key7",@"value77",@"key77", nil];

nslog(@"dict7 = %@",dict7);

nsdictionary *dict8 = [nsdictionary dictionarywithobject:@"value8"

forkey:@"key8"];

nslog(@"dict8 = %@",dict8);

複製**

大家在使用中根據實際情況建立,因為是不可變陣列,所以一遍都是使用第一種,直接賦值,算是偷懶吧... 至於常用方法,我還是舉些例子.具體場景具體使用

//常用方法

//count (字典元素格式 key:value 是一一對應的,所以是算作乙個的)

nslog(@"%ld",[dict7 count]);

//objectforkey: (獲取乙個key對用的值)

nslog(@"%@",[dict7 objectforkey:@"key7"]);

//allkeys (獲取key集合)

nslog(@"%@",[dict7 allkeys]);

//allkeysforobject: (獲取該value對應的所有key key是唯一的 但是value是有可能相同的)

nslog(@"%@",[dict7 allkeysforobject:@"key7"]);

//allvalues (獲取所有value)

nslog(@"%@",[dict7 allvalues]);

//isequaltodictionary (是否和其他字典相同)

nslog(@"%d",[dict7 isequaltodictionary:dict8]);

//keyssortedbyvalueusingselector: (對所有的key進行排序)

nslog(@"%@",[dict7 keyssortedbyvalueusingselector:@selector(compare:)]);

//遍歷

//for

infor (id key in dict7)

//列舉遍歷

nsenumerator *enumerator = [dict7 keyenumerator];

id key = [enumerator nextobject];

while (key)

//block

[dict7 enumeratekeysandobjectsusingblock:^(id _nonnull key, id _nonnull obj, bool * _nonnull stop) ];

複製**

在接下來就是它的子類 可變字典了, 跟字串,陣列一樣,可變型別和不可變的區別是不可變的型別,在建立的時候賦值了,那麼他就不會變了,一直到釋放都是如此, 但是可變型別,是可以改變值的.

nsmutabledictionary 首先是它的建立,因為整合nsdictionary 所以跟之前一樣 繼承的那麼所有的方法都可以拿過來直接用包括建立.... 建立的話就簡單幾個例子吧

//建立

//dictionary

nsmutabledictionary *dict9 = [nsmutabledictionary dictionary];

nslog(@"dict9 = %@",dict9);

//dictionarywithcapacity:

nsmutabledictionary *dict10 = [nsmutabledictionary dictionarywithcapacity:0];

nslog(@"dict10 = %@",dict10);

複製**

常用方法

//常用方法

//setobject:(setvalue:)forkey: (新增某元素)

[dict10 setobject:@"value10"

forkey:@"key10"];

[dict10 setobject:@"value11"

forkey:@"key11"];

[dict10 setobject:@"value12"

forkey:@"key12"];

[dict10 setvalue:@"value13"

forkey:@"key13"];

[dict10 setvalue:@"value14"

forkey:@"key14"];

[dict10 setvalue:@"value15"

forkey:@"key15"];

nslog(@"%@",dict10);

//removeobjectforkey: (移除某乙個key對應的元素)

[dict10 removeobjectforkey:@"key15"];

nslog(@"%@",dict10);

//removeobjectsforkeys (移除一組key對應的元素)

[dict10 removeobjectsforkeys:@[@"key14",@"key13"]];

nslog(@"%@",dict10);

//removeallobjects (移除所有元素)

[dict10 removeallobjects];

nslog(@"%@",dict10);

複製**

再之後我會繼續講nsnumber 和 nsdata 至於為什麼, 在這裡都解釋一下 我們基本上在開發應用的時候都是有很多網路資料的 這些可能是json 可能是xml,也可能是其他的, 但是這些解析之後其實都是類似的字串,陣列,字典,基本資料型別..... 所以我覺得有必要把這些都簡單的過一遍,這樣在解析資料之後, 我們在應用的介面上展示,如何操作這些資料,在底層邏輯上如何處理這些資料等等,我們就會得心應手.

系列:ios開發-前言+大綱 blog.csdn.net/spicyshrimp…

iOS開發系列

ios開發系列 ui 自定義tableview 本章實現效果 我們使用mvc架構來實現自定義tableview,具體的mvc介紹請自行,在本章中不作為主要內容講解。model層 datasource.h import inte ce datasource nsobject nsarray getus...

iOS開發系列文章

ios開發系列的文章,內容循序漸進,包含c語言 objc ios開發以及日後要寫的遊戲開發和swift程式設計幾部分內容。文章會持續更新,希望大家多多關注,如果文章對你有幫助請點贊支援,多謝!ios開發系列 c語言之基礎知識 ios開發系列 c語言之陣列和字串 ios開發系列 c語言之指標 ios開...

自學iOS開發系列 OC(block)

1.block 塊語法,是一種新的語法結構。學習的時候可以模擬於函式指標。2.block和函式指標對比 import 宣告函式 int add int,int int main int argc,char argv nslog d block 3,6 實現函式 int add int a,int b...