1. 程式人生 > >OC--NSArray和NSMutableArray

OC--NSArray和NSMutableArray

NSArray:

只能存放物件。不能存放C語言中基本的資料型別。如int/double/float等等

陣列下標越界不會有警告,執行時會直接報錯

// 不可變陣列NSArray

// 在陣列從存入nil需要使用NSNull,不可以直接存入nil,因為在陣列中nil代表陣列結束

    NSNull *n = [NSNull null];

 // 建立陣列物件,並在其中新增幾個NSString物件,nil代表陣列的結束,不可能更改

    NSArray *array1 = [NSArray arrayWithObjects:@"one", @"tow", n, @"three", nil];

    NSArray *array2 = [NSArray arrayWithObject:@"呵呵,你真逗。。。。。"];

// 計算陣列的長度

    NSLog(@"array1 count : %ld", [array1 count]);

    NSLog(@"array2 count : %ld", [array2 count]);

// 取出陣列中得物件

    // 簡單的使用for迴圈通過下邊來獲取物件

    for (int i = 0; i < [array1 count]; i++) {

        NSLog(@"array1[%d] = %@", i, [array1 objectAtIndex:i]);

    }

// 以訊息巢狀的形式例項化一個NSArray物件

    NSArray *array3 = [[NSArray alloc] initWithObjects:@"abc", @"def", @"haha", nil];

    NSLog(@"array3 = %ld", [array3  count]);

    NSLog(@"%@", array3); // 陣列使用小括號來包括

    // 釋放記憶體

    [array3 release];

// 可變陣列NSMutableArray

// 通過arrayWithCapacity:來建立一個可變陣列,指定長度為10

    NSMutableArray *mutableArray1 = [NSMutableArray arrayWithCapacity:10];

    // 使用類方法建立一個物件

    mutableArray1 = [NSMutableArray arrayWithObjects:@"111", nil];

    // 通過addObject物件新增物件

    [mutableArray1 addObject:@"one"];

    [mutableArray1 addObject:@"two"];

    [mutableArray1 addObject:@"three"];

    // 列印陣列的長度

    NSLog(@"mutableArray count =  %ld", [mutableArray1 count]);

    // 列印陣列

    NSLog(@"mutableArray %@", mutableArray1.description);

    // 使用for迴圈列印陣列

    for (int i = 0; i < [mutableArray1 count]; i++) {

        NSLog(@"mutableArray[%d] = %@", i, [mutableArray1 objectAtIndex:i]);

    }

    // 刪除陣列中得物件

    // [mutableArray1 removeLastObject]; // 刪除最後一個物件

    // [mutableArray1 removeObject:@"111"]; // 刪除指定名稱的物件

    [mutableArray1 removeObjectAtIndex:1]; // 刪除指定位置的物件

    // [mutableArray1 removeAllObjects]; // 刪除全部物件

    NSLog(@"mutableArray %@", mutableArray1.description);

    // 向可變陣列中插入物件, 插入的字串中有空格的時候會被雙引號包圍

    [mutableArray1 insertObject:@"new String" atIndex:2 ];

    NSLog(@"mutableArray %@", mutableArray1.description);    

    // 替換陣列中物件 // 存入中文時直接列印陣列會出現"\U7231\U597d"這種形式,需要從陣列中取出來才可以正常顯示

    [mutableArray1  replaceObjectAtIndex:3 withObject:@"愛好"];

    NSLog(@"mutableArray %@", mutableArray1.description);

    NSString *string = [mutableArray1 lastObject];

    NSLog(@"%@", string);

    // 陣列的替換

    // 陣列的簡寫@[@"0", @"2"]

    NSRange range = NSMakeRange(1, 2);

    // 對應的進行替換

    [mutableArray1 replaceObjectsInRange:range withObjectsFromArray:@[@"1111111", @"2222222"]];

    NSLog(@"mutableArray %@", mutableArray1.description);

// 陣列的排序

// 可變陣列直接在原陣列上進行排序,不可變陣列排序後產生新的陣列

    NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"3", @"6", @"2", @"1", nil];

    NSLog(@"%@", array1);

    // 使用選擇器進行比較陣列,返回一個升序的陣列

    [array1 sortUsingSelector:@selector(compare:)];

    NSLog(@"使用選擇排序後: %@", array1);

    // 使用sortUsingCompare:

    [array1 sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {

        obj1 = @"1";

        obj2 = @"2";

        return NSOrderedDescending;

        }];

    NSLog(@"使用選擇排序後: %@", array1);    

    // 用規定的描述對陣列進行排序

    // NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];

    // [array1 sortUsingSelector:[NSArray arrayWithObject:sd]];

    // NSLog(@"%@", array1);

// 陣列的遍歷

 // 建立陣列

    NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"3", @"6", @"2", @"1", nil];

    // 可以通過列舉器和nextObject可以返回當前物件

    // 使用NSEnumerator遍歷物件,通過給陣列傳送objectEnumerator獲取到整個陣列的列舉器

    NSEnumerator *enumerator = [array1 objectEnumerator];

    // 儲存陣列中每個元素物件

    id object = nil;

    while (object = [enumerator nextObject]) { // 通過nextObject訊息讀取下一個元素物件

        NSLog(@"%@", object);

    }

    // 使用 快速列舉 遍歷陣列取值

    id object1 = nil;

    for (object1 in array1) {

        NSLog(@"%@", object1);

    }