1. 程式人生 > >ObjectC快速入門教程(3)---陣列和字典

ObjectC快速入門教程(3)---陣列和字典

一.不可變陣列

1.建立

總結:OC中陣列是物件的有序集合,陣列儲存的是物件的地址(物件的引用),不可變陣列一旦被建立,不可以繼續新增,刪除,或者修改;陣列中的元素可以為不同型別的物件.

  NSArray *array1 = @[@"one", @"two", @"three", @"four", [NSNumber numberWithInt:123]];
        NSLog(@"array1 = %@", array1);
        NSArray *array1 = @[@"one", @"two", @"three", @"four", [NSNumber
numberWithInt:123]]; NSLog(@"array1 = %@", array1); NSArray *array2 = [[NSArray alloc]init]; //空陣列 NSLog(@"array2 = %@", array2); NSArray *arryy3 = [[NSArray alloc]initWithObjects:@"one", @"two", nil]; NSLog(@"array3 = %@", arryy3);

2.陣列的訪問

 NSLog(@"array1[1] = %@"
, [array1 objectAtIndex:1]); NSLog(@"array1[1] = %@", array1[1]); NSLog(@"cnt = %li", [array1 count]); //獲取元素在陣列中第一次出現的位置 NSInteger index = [array1 indexOfObject:@"two"]; NSLog(@"index = %li", index); NSLog(@"first = %@", [array1 firstObject]); //第一個元素 NSLog
(@"last = %@", [array1 lastObject]); //最後一個元素

3.陣列的比較

      //陣列比較
        NSArray *array10 = @[@"one", @"two", @"three"];
        NSArray *array11 = [NSArray arrayWithObjects:@"one", @"two1", nil];
        BOOL ret = [array10 isEqualToArray:array11]; //判斷兩個陣列是否相等
        if(ret){
            NSLog(@"兩個陣列相等");
        }else{
            NSLog(@"兩個陣列不想等");
        }
        //返回陣列中第一個想等的元素
        id obj = [array10 firstObjectCommonWithArray:array11];
        NSLog(@"%@", obj);

4.陣列排序

//陣列排序,前提:陣列中的元素是相同型別的
        NSArray *sortArray = [array10 sortedArrayUsingSelector:@selector(compare:)];//@selector大於0時進行交換
        NSLog(@"%@", sortArray);

5.陣列新增

 //陣列新增
        NSArray *array12 = [array10 arrayByAddingObject:@"five"];
        NSLog(@"array12 = %@", array12);

6.指定範圍內的提取

 //提取指定範圍內的陣列
        NSArray *array13 = [array10 subarrayWithRange:NSMakeRange(2, 2)];
        NSLog(@"array13 = %@", array13);

        //NSIndexSet 下表集合類
        NSMutableIndexSet *index2 = [NSMutableIndexSet indexSetWithIndex:1];

        [index2 addIndex:3];
        NSArray *array14 = [array10 objectsAtIndexes:index2];
        NSLog(@"array14 = %@", array14);

7.字串分割成陣列

 NSString* str = @"I :am :good :boy";
        NSArray* array15 = [str componentsSeparatedByString:@" :"];
        NSLog(@"array15 = %@", array15);

        NSArray *array16 = [str componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" :"]];
        NSLog(@"array16 = %@", array16);

注意:componentsSeparatedByStringcomponentsSeparatedByCharactersInSet的區別,參考,前者以字串整體作為分隔符,後者以字串集合中的每一個字元作為分隔符.

8.陣列元素的拼接

 NSArray *array = @[@"one", @"two", @"three"];
        NSString *arrayStr = [array componentsJoinedByString:@" "];
        NSLog(@"arrayStr = %@", arrayStr);

9.陣列遍歷

        //方法1,通過陣列元素下標
        for(NSInteger i = 0; i < [array count]; i++){
//            NSLog(@"%@", [array objectAtIndex:i]);
        }

        //方法2,通過列舉器
        NSEnumerator *enumerator = [array reverseObjectEnumerator];
        id obj2 = nil;
        while(obj2 = [enumerator nextObject]){
//            NSLog(@"%@", obj2);
        }

        //方法3,快速列舉法
        for(id obj3 in array){
            NSLog(@"%@", obj3);
        }

二.可變陣列

1.建立新增

NSMutableArray *marray = [[NSMutableArray alloc]initWithObjects:@"one", @"two", @"three", nil];
        [marray addObject:@"four"];
        [marray addObjectsFromArray:@[@"five", @"six"]]; //增加
        [marray insertObject:@"zero" atIndex:0];    //插入
        NSLog(@"%@", marray);

2.替換指定位置下標元素

  [marray setArray:@[@"1", @"2"]];
        NSLog(@"%@", marray);
        [marray replaceObjectAtIndex:1 withObject:@"123"];
        NSLog(@"%@", marray);

3.交換

   [marray exchangeObjectAtIndex:0 withObjectAtIndex:1];
        NSLog(@"%@", marray);

4.刪除

三.字典物件

1.建立,新增

NSDictionary *dict0 = @{@"one":@"1",@"two":@"2"}; //前面是key後面是value
        NSLog(@"%@", dict0);
        NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"one",@"1",@"two", @"2",nil];//前面是value後面是key
        NSLog(@"%@", dict);

        NSMutableDictionary *dict1 = [NSMutableDictionary dictionaryWithDictionary:dict0];
        [dict1 setValue:@"4" forKey:@"four"]; //增加一個元素
        NSInteger count = [dict1 count]; //個數
        NSLog(@"%@", dict1);
        id obj33 = [dict1 objectForKey:@"one"]; //根據key得到value

        NSArray *keyArray = [dict1 allKeys]; //獲得所有key
        NSArray *value = [dict1 allValues];  //獲得所有value
        BOOL isEqual = [dict1 isEqualToDictionary:dict];
        if(isEqual){
            NSLog(@"相等");
        }else{
            NSLog(@"不相等");
        }

        NSLog(@"%@", value);

        //增加鍵值對
        [dict1 addEntriesFromDictionary:@{@"hello":@"hello123"}];

注意事項:在字典物件中,key的值是唯一的,一旦有了一個key,是不能覆蓋的。

2.字典的遍歷

    //方法1,列舉法
        NSEnumerator *keyEnumerator = [dict1 keyEnumerator];
        id obj44 = nil;
        while(obj44 = [keyEnumerator nextObject]){
            NSLog(@"key = %@ value = %@", obj44, [dict1 valueForKey:obj44]);
        }

        //方法2,快速列舉法
        for(id obj55 in dict1){
            NSLog(@"key = %@ value = %@", obj55, [dict1 objectForKey:obj55]);
        }