1. 程式人生 > >NSArray,NSDictionary,NSSet用法及區別

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狀態。執行以下步驟將