NSArray,NSDictionary,NSSet用法及區別
-NSArray
1、初始化、取值等基礎操作
NSArray 是不可變陣列,一旦建立完成就不能夠對陣列進行,新增,刪除等操作
NSArray * array1 = [NSArrayarrayWithObjects:str1,str2,str3,str1,nil];
在建立一個NSArray的時候最後一個元素一定是nil 不要把nil存到陣列中,會導致資料丟失建立陣列的快捷方式
NSArray * array = @[@"a",@"b",@"c"];
2、遍歷陣列
a、普通的for迴圈
for (int i = 0; i < array.count; i++)
{
NSString * str = array[i];
NSLog(@"array[%d] = %@",i,str);
}
b、使用增強for迴圈的方式遍歷陣列
for (NSString * str in array)
{
NSLog(@"str = %@",str);
}
c、列舉器
NSArray * array = @[@"one",@"two",@"three"];
NSEnumerator * enumerator = [array objectEnumerator];
NSString * value;
while (value = [enumerator nextObject]) {
NSLog(@"enum str %@",value);
}
3、陣列排序
a、使用sortedArrayUsingSelector
[array sortedArrayUsingSelector:@selector(compare:)]
b、使用block方式排序
array2 = [array2 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
/*
NSComparisonResult result = [obj1 compare:obj2];
return result;
*/
//obj1 compare obj2 就是正序排序
//return [obj1 compare:obj2];
//obj2 compare obj1 就是倒序排序
return [obj2 compare:obj1];
}];
如果你向給你自己定義的物件排序,必須根據某一個屬性來排序,
sortDescriptorWithKey 引數要的就是你物件中,要依據哪個屬性來排序,你就把哪個屬性的名字當成key傳入
ascending YES表示正序 NO表示倒敘
NSSortDescriptor * d1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
NSSortDescriptor * d2 = [NSSortDescriptor sortDescriptorWithKey:@"year" ascending:NO];
如果你要使用多個屬性進行排序,預設在前面的NSSortDescriptor優先順序比較高
NSArray * description = @[d2,d1];
array3 = [array3 sortedArrayUsingDescriptors:description];
4、可變陣列NSMutableArray
建立可變陣列
NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:0];
-使用addObject 動態給陣列中增加元素
[array addObject:@“one"];
-陣列中可以儲存,同一個物件多次
-指定物件插入的位置
[array insertObject:str1 atIndex:2];
-刪除 會通過物件,刪除陣列中所有的同一個地址的物件
[array removeObject:str1];
-通過索引的方式刪除物件,超出了陣列的count值,那麼就會導致異常 index beyond bounds
[array removeObjectAtIndex:0];
[array removeAllObjects];
-NSDictionary
1、初始化
-建立欄位,不可變的
NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:@"s",@"name", nil];
-快捷建立方式
NSDictionary * dic2 = @{ @"one":@"1",@"two":@"2"};
dic2.count 獲得字典長度
2、遍歷
NSArray * keys = [dic3 allKeys];
for (int i = 0; i < keys.count; i++)
{
NSString * key = [keys objectAtIndex:i];
//如果你的字典中儲存的多種不同的型別,那麼最好用id型別去接受它
id obj = [dic3 objectForKey:key];
NSLog(@"obj %@",obj);
}
—列舉器
NSEnumerator * enumerator = [dic3 objectEnumerator];
id value;
while (value = [enumerator nextObject]) {
NSLog(@"value %@",value);
}
3、可變字典NSMutableDictionary
-建立一個可變長度字典
NSMutableDictionary * muDic = [[NSMutableDictionary alloc] initWithCapacity:0];
-向字典中村如資料
[muDic setObject:@"1" forKey:@"one"];
-刪除
[muDic removeObjectForKey:@“one"];
-全部刪除
[muDic removeAllObjects];
-NSSet
1、NSSet是無序的
注意:這個是最為重要的功能 NSSet中不能夠儲存重複的資料,可以用它來去除重複的值
NSSet * set1 = [[NSSetalloc] initWithObjects:str1,str2,str3,str1, nil];
這樣其實在set中指儲存了 @“one”,@“two”,@“three” set.count 值為3 【看最下面例項】2、遍歷
NSEnumerator * enumerator = [set objectEnumerator];
NSString * value;
while (value = [enumerator nextObject]) {
NSLog(@"value %@",value);
}
3、可變集合NSMutableSet
-建立一個可變集合
NSMutableSet * muSet = [[NSMutableSet alloc] init];
-增加值
[muSet addObject:str1];
-刪除
[muSet removeObject:str1];
-刪除所有
[muSet removeAllObjects];
-集合之間相互轉換
1.NSArray 轉換成 NSMutableArray
NSArray * array = @[@"one",@"two",@"three"];
NSMutableArray * muArray = [NSMutableArray arrayWithArray:array];
2.NSDictionary 轉換成 NSMutableDictionary
NSDictionary * dic = @{@"one":@"1",@"two":@"2"};
NSMutableDictionary * muDic = [NSMutableDictionary dictionaryWithDictionary:dic];
3.NSSet 轉換成 NSMutableSet
NSSet * set = [[NSSet alloc] initWithObjects:@"one",@"two", nil];
NSMutableSet *muSet = [NSMutableSet setWithSet:set];
4.NSArray 轉換成NSSet
NSMutableSet * muSet2 = [NSMutableSet setWithArray:array];
5.NSDictionary 轉化成NSArray
NSArray * keys = [dic allKeys];
NSArray * values = [dic allValues];
6.字串轉換成陣列
NSString * str = @"aa.bb.cc";
NSArray * strArray =[str componentsSeparatedByString:@“."];
例項:
NSString * str1 = @"one";
NSString * str2 = @"two";
NSString * str3 = @"three";
//陣列不可變
NSArray * array1 = [NSArrayarrayWithObjects:str1,str2,str3,str1,nil];
NSLog(@"陣列不可變 array1 count: %ld",[array1 count]);
NSLog(@"陣列不可變內容: %@",array1);
//集合不可變
NSSet * set1 = [[NSSetalloc] initWithObjects:str1,str2,str3,str1, nil];
NSLog(@"集合不可變 array1 count: %ld",[set1 count]);
NSLog(@"集合不可變內容: %@",set1);
//陣列可變
NSMutableArray * array2 = [NSMutableArraynew];
[array2 addObject:str1];
[array2 addObject:str2];
[array2 addObject:str3];
[array2 addObject:str1];
NSLog(@"陣列可變 array1 count: %ld",[array2 count]);
NSLog(@"陣列可變內容: %@",array2);
//集合可變
NSMutableSet * set2 = [[NSMutableSetalloc] init];
[set2 addObject:str1];
[set2 addObject:str2];
[set2 addObject:str3];
[set2 addObject:str1];
NSLog(@"集合可變 array1 count: %ld",[set2 count]);
NSLog(@"集合可變內容: %@",set2);
//陣列轉集合
NSMutableSet * set3 = [NSMutableSetsetWithArray:array1];
NSLog(@"陣列轉集合內容: %@",set3);
輸出日誌:
2017-10-10 17:22:02.651060+0800 setAndArray[1558:84219] 陣列不可變 array1 count: 4
2017-10-10 17:22:02.651173+0800 setAndArray[1558:84219] 陣列不可變內容: (
one,
two,
three,
one
)
2017-10-10 17:22:02.651213+0800 setAndArray[1558:84219] 集合不可變 array1 count: 3
2017-10-10 17:22:02.651269+0800 setAndArray[1558:84219] 集合不可變內容: {(
one,
three,
two
)}
2017-10-10 17:22:02.651289+0800 setAndArray[1558:84219] 陣列可變 array1 count: 4
2017-10-10 17:22:02.651325+0800 setAndArray[1558:84219] 陣列可變內容: (
one,
two,
three,
one
)
2017-10-10 17:22:02.651345+0800 setAndArray[1558:84219] 集合可變 array1 count: 3
2017-10-10 17:22:02.651372+0800 setAndArray[1558:84219] 集合可變內容: {(
one,
two,
three
)}
//裝換成集合後 自動去除重複值的物件
2017-10-10 17:08:23.366852+0800 setAndArray[1415:73533] 陣列轉集合內容: {(
one,
three,
two
)}
相關推薦
NSArray,NSDictionary,NSSet用法及區別
-NSArray1、初始化、取值等基礎操作 NSArray 是不可變陣列,一旦建立完成就不能夠對陣列進行,新增,刪除等操作 NSArray * array1 = [NSArrayarrayWithObjects:str1,str2,str3,str1,nil]; 在建立一個N
Linux中yum和apt-get用法及區別
記錄 auto yum安裝軟件 mirror 內核 epo 綁定 提示 們的 Linux中yum和apt-get用法及區別 一般來說著名的linux系統基本上分兩大類: 1.RedHat系列:Redhat、Centos、Fedora等 2.Debian系列:De
set uid ,set gid ,sticky bit用法及區別
三種權限suid:以屬主的身份去執行命令任何命令、程序在執行期間都具有身份[user2@room9pc01 ~]$ ls /root #失敗[root@room9pc01 ~]# chmod u+s /usr/bin/ls [user2@room9pc01 ~]$ touch u1.txt #to
Mysql中union和union all的用法及區別
employee rom 最終 sel 推薦 china carte 區別 column UNION 用於合並兩個或多個 SELECT 語句的結果集,並消去表中任何重復行。UNION 內部的 SELECT 語句必須擁有相同數量的列,列也必須擁有相似的數據類型。同時,每條 S
Linux中wget、yum與apt-get用法及區別
一般來說著名的linux系統基本上分兩大類: RedHat系列:Redhat、Centos、Fedora等 Debian系列:Debian、Ubuntu等 RedHat 系列 常見的安裝包格式 rpm包,安裝rpm包的命令是“rpm -引數” 包管理工具 yum 支援tar包 Deb
git clone、git pull和git fetch的用法及區別
更新 服務器 指定 保存 今天 文章 git fetch origin 收藏 聲明:碼字不易,轉載請註明出處,歡迎文章下方討論交流。 最近在一個學習小組裏學習AI的課程,我們所有的學習資料和homework都放在gitlab上。今天一個小隊友從gitlab上load倉庫的時
「PHP」include()、include_once()、require()、require_once()的用法及區別
(1)為神馬要使用include、include_once、require、require_once? 因為要使用函式自定義庫,官方一點來說就是:函式庫並不是定義函式的PHP語法,而是程式設計時的一種設計模式。函式是結構
List list = new ArrayList();和ArrayList list=new ArrayList();用法及區別(轉載)
List是一個介面,而ArrayList 是一個類。 ArrayList 繼承並實現了List。 List list = new ArrayList();這句建立了一個ArrayList的物件後把上溯到了List
shell命令中;,&,&&,|,||用法及區別
在linux運維過程中時常會執行多條命令,這樣我們就需要多重命令方式進行處理 ;運算子 通過使用;來執行多條命令,例如: # cd /root/home;mkdir a1d4m;cd a1d4m/ &運算子 通過使用&來執行多條命令,例如: # cd /root/h
Python中關鍵字nonlocal和global的用法及區別
一、Python3中global與nonlocal 用法 nonlocal 首先,要明確 nonlocal 關鍵字是定義在閉包裡面的(不定義在閉包裡會拋異常SyntaxError: nonlocal declaration not allowed at mod
qs.parse()、qs.stringify()、JSON.stringify() 用法及區別
qs是一個npm倉庫所管理的包,可通過npm install qs命令進行安裝。 qs.stringify()將物件序列化成URL的形式,以&進行拼接。 qs.parse()將URL解析成物件的形式 。 JSON.stringi
PHP中session和cookie的用法及區別
一,session 1.session 是啥? 2.怎麼儲存的? 3.如何執行? 4.有生命週期嗎? 5.關閉瀏覽器會過期嗎? 6.Redis代替檔案儲存session 7.分散式session的同步問題 session是啥?
typeof()、instanceof()用法及區別
typeof()及instanceof()操作符的用法及區別 typeof():檢測基本型別值所屬型別 instanceof():檢測引用型別值具體屬於什麼型別的物件 ......
Linux下載:wget、yum與apt-get用法及區別
一般來說著名的linux系統基本上分兩大類: RedHat系列:Redhat、Centos、Fedora等 Debian系列:Debian、Ubuntu等 RedHat 系列 常見的安裝包格式 rpm包,安裝rpm包的命令是“rpm -引數” 包管
Vue.js的computed和watch用法及區別
1. 如何使用 1.1 computed計算屬性 <template> <div> <el-input v-model="value1" placeholder="費用1"></el-input>
C++各種智慧指標的用法及區別
在C++程式設計中,智慧指標絕對是很強大的用法,boost庫裡把這些指標用的出神入化,它可以簡化程式設計師寫程式碼的複雜度,不用去考慮程式碼分支路徑導致的遺漏delete語法,也無須擔心冗餘delete導致的double free問題。但是,便利性也要求程式猿熟悉各
常用集合用法及區別
java集合框架圖 : 簡化圖: Collection:介面 |=List:元素可重複,有序 |=ArrayList:(可變陣列、執行緒不同步
js中call、apply、bind的用法及區別
call、apply和bind:三者作用一致(都是改變函式的this指向),只是使用的方法不同而已。apply 、 call 、bind 三者都是用來改變函式的this物件的指向的;apply 、 call 、bind 三者第一個引數都是this要指向的物件,也就是想指定的上
python 3.x中列表中元素刪除del、remove、pop的用法及區別
使用del刪除指定位置元素 del是python語句,而不是列表方法,無法通過list來呼叫。使用del可以刪除一個元素,當元素刪除之後,位於它後面的元素會自動移動填補空出來的位置。 example:A列表 del A
資料檔案、表空間offline用法及區別
對資料庫的離線包括資料檔案的離線和對錶空間的離線,表空間離線實際就是表空間對應的所有資料檔案離線。 1. 資料檔案OFFLINE 資料檔案新增到表空間之後不能夠被刪除的,沒有語法支援這麼做,如果想不使用該資料檔案,唯一是將資料檔案設定為OFFLINE狀態。執行以下步驟將