程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Objective-C學習筆記_字典、集合、數組排序

Objective-C學習筆記_字典、集合、數組排序

編輯:關於C語言

Objective-C學習筆記_字典、集合、數組排序


一字典類 二集合類 三數組字典集合的快速遍歷 四數組排序 五數組元素按照數值大小排序

一、字典類

字典?於保存具有映射關系(key-value對)數據的集合。對於“姓名:張三”來講,key就是“姓名”,key對應的value是“張三”。一個key-value對認為是?個條目,字典是存儲key-value對的容器。與數組不同,字典靠key存取元素。key不能重復,value必須是對象。鍵值對在字典中是無序存儲的。字典也分為,不可變字典(NSDictionary)和可變字典(NSMutableDictionary)。

NSDictionary,不可變字典,繼承NSObject。即字典一旦創建,鍵值對就不可更改,不可添加,不可刪除。僅能讀取key或者value。

        /* 不可變字典 */
        /* 創建對象 */
        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
                             @ZhangSan, @name,
                             @Man, @sex,
                             @18, @age,
                             @130, @weight,
                             nil];

        /* 輸出字典 */
        NSLog(@%@, dic);

        /* 獲取所有的Key值 */
        [dic allKeys];
        NSLog(@%@, [dic allKeys]);

        /* 獲取所有的Value值 */
        [dic allValues];
        NSLog(@%@, [dic allValues]);

        /* 通過Key查詢Value值 */
        [dic objectForKey:@name];
        NSLog(@%@, [dic objectForKey:@name]);

        [dic valueForKey:@name];
        NSLog(@%@, [dic valueForKey:@name]);

        /* 遍歷字典 */
        NSArray *keyArr = [dic allKeys];
        for (int i = 0; i < keyArr.count; i++) {
            NSString *keyStr = [keyArr objectAtIndex:i];
            NSLog(@%@, [dic objectForKey:keyStr]);
        }

        /* 快速遍歷 */
        for (NSString *key in dic) {
            NSLog(@%@, [dic objectForKey:key]);
        }

        /* keyArr快速遍歷 */
        for (NSString *str in keyArr) {
            NSLog(@%@, str);
        }

NSMutableDictionary,可變字典,繼承NSDictionary。可以對管理的鍵值對進?行增、刪、改。

        /* 可變字典 */
        NSMutableDictionary *mDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                     @LiSi, @name,
                                     @18, @age,
                                     @woman, @sex,
                                     @120, @weight,
                                     nil];
        for (NSString *key in mDic) {
            NSLog(@%@, [mDic objectForKey:key]);
        }

        /* 增加鍵值對 */
        [mDic setObject:@170cm forKey:@height];
        [mDic setValue:@volleyball forKey:@hobby];

        for (NSString *key in mDic) {
            NSLog(@%@, [mDic objectForKey:key]);
        }

        /* 修改鍵值對 */
        [mDic setObject:@20 forKey:@age];
        for (NSString *key in mDic) {
            NSLog(@%@, [mDic objectForKey:key]);
        }

        /* 刪除鍵值對 */
        [mDic removeObjectForKey:@hobby];
        for (NSString *key in mDic) {
            NSLog(@%@, [mDic objectForKey:key]);
        }

二、集合類

集合類*NSSet,類似數學中集合的概念,具有確定性、無序性、互異性*。即集合中存儲的元素必須是對象類型,存儲的元素是無順序的,存儲的元素唯一。集合類也分為NSSet和NSMutableSet。

NSSet的示例代碼如下:

        /* 不可變Set */
        /* 創建 */
        NSSet *set = [NSSet setWithObjects:@四平, @長春, @吉林, @四平, nil];

        /* 獲取Set元素個數 */
        NSLog(@%lu, set.count);

        /* 獲取Set中某一元素 */
        NSLog(@%@, [set anyObject]);

        /* 判斷Set中是否包含某一個對象 */
        if ([set containsObject:@沈陽]) {
            NSLog(@有);
        }
        else {
            NSLog(@無);
        }

        /* 遍歷集合 */
        for (NSString *str in set) {
            NSLog(@%@, str);
        }

NSMutableSet的示例代碼如下:

        /* 可變集合 */
        NSSet *set2 = [NSSet setWithObjects:@DaLian, @BeiJing, nil];
        NSMutableSet *mSet = [NSMutableSet setWithSet:set2];

        /* 合並兩個集合 */
        [mSet unionSet:set];
        for (NSString *str in mSet) {
            NSLog(@%@, str);
        }

        /* 相交兩個集合 */
        [mSet intersectSet:set];

        /* 添加元素 */
        [mSet addObject:@通化];

        /* 刪除元素 */
        [mSet removeObject:@BeiJing];
        for (NSString *str in mSet) {
            NSLog(@*%@*, str);
        }        

NSCountedSet是NSMutableSet的子類,能記錄元素的重復次數。在NSSet的基礎上添加了計數功能。

NSCountedSet的示例代碼如下:

        /* NSCountedSet類 */
        NSArray *arr = [NSArray arrayWithObjects:@Zhang, @LiSi, @LiSi, @Wang, @Wang, @LiSi, nil];
        NSCountedSet *countSet = [NSCountedSet setWithArray:arr];

        /* 查看countSet元素個數 */
        NSLog(@%lu, countSet.count);

        /* LiSi計數 */
        NSLog(@%lu, [countSet countForObject:@LiSi]);

三、數組、字典、集合的快速遍歷

for (<#type *object#> in <#collection#>) {

}
object是遍歷得到的元素對象。 collection是集合類型的對象:數組、字典、集合。

集合類型枚舉的特點

數組枚舉得到數組中的元素對象字典枚舉得到字典中的key值集合枚舉得到集合中的元素對象
        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
                             @ZhangSan, @name,
                             @Man, @sex,
                             @18, @age,
                             @130, @weight,
                             nil];

                             /* 快速遍歷 */
        for (NSString *key in dic) {
            NSLog(@%@, [dic objectForKey:key]);
        }

四、數組排序

數組排序取決於判斷條件,判斷條件決定了排序的?式(升序、降序)。iOS為數組提供了排序?法,同時提供了接口讓我們傳遞判斷條件。

        NSMutableArray *mArr = [NSMutableArray arrayWithObjects:@3, @2, @1, @4, nil];

        /* 可變數組排序 */

        /* @selector --> 方法選擇器, 獲取方法名的意思.
         * compare: --> 數組中元素的方法(元素是字符串, compare是字符串的一個方法)
         */
        [mArr sortUsingSelector:@selector(compare:)];
        NSLog(@%@, mArr);

        /* 不可變數組排序 */
        NSArray *arr = [NSArray arrayWithObjects:@4, @2, @1, @3, nil];
        NSArray *sortArr = [arr sortedArrayUsingSelector:@selector(compare:)];
        NSLog(@%@, sortArr);

五、數組元素按照數值大小排序

數組中存儲的元素是對象類型,如果存儲的元素都是數值對象,按照上述方法排序就不能得到正確的結果。因此,需要使用NSNumberFormatter將字符串轉化為NSNumber對象。具體實現代碼如下:

#pragma mark - 數值數組排序
#if 1
        NSArray *arr = @[@1, @12, @122, @67, @50, @666];

        NSMutableArray *numArr = [NSMutableArray array];

        for (NSString *string in arr) {
            //  NSNumberFormatter格式轉化
            NSNumberFormatter *format = [[NSNumberFormatter alloc] init];
            //  NSString 轉成 NSNumber
            NSNumber *num = [format numberFromString:string];
            [numArr addObject:num];
        }
        //  根據數組裡元素的類型來調用相應的方法, 相當於排序中條件判斷
        NSLog(@%@, [numArr sortedArrayUsingSelector:@selector(compare:)]);
#endif

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved