iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
自我挑戰組

iOS 菜鳥工程師的30天 objective-C系列 第 9

Day 09 - Array

Array 是一個有序的集合,可以存儲相同類型的元素。

初始化:

// 1. init時就有值
NSArray *arrayOne = [NSArray arrayWithObject:@"taiwan"];

// taiwan

// 2. init時為空,後來新增值進入array
NSMutableArray *arrayTwo = [NSMutableArray array];
[arrayTwo addObject:@"taiwan"];
[arrayTwo addObject:@123123];

//[tawian,123123]

NSArray vs. NSMutableArray

NSArray 就像是 let array ,NSMutableArray 則像 var array
NSArray 是一個常數,初始化時給定參數後就無法再修改,used for read only

NSArray * array2;
array2 = [array2 arrayByAddingObject:obj];

這意味著創造一個新的 array 並將 pointer 更改為新創的 array。這方法會導致 Memory Leak,因為在創造新 array 前沒有清理舊的 array。

若要採用上述方式,必須要清理掉舊 array:

NSArray *oldArray;
NSArray *newArray;
newArray = [oldArray arrayByAddingObject:obj];
[oldArray release];

但如果想修改 array 最好的做法是使用 NSMutableArray

NSMutableArray *mutableArray;
// Initialisation etc
[mutableArray addObject:obj];

array 排序

在 Objective-C 中,想要排序就需要用到一個工具,NSSortDescriptor
先準備一個 array,裡頭放亂序的數字

NSArray *array = @[@5,@3,@8,@6];

準備好排序規則,key 是指有沒有要按照什麼屬性排列,ascending 是代表要不要靠升序來排序。

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];

執行排列

array = [array sortedArrayUsingDescriptors:@[sortDescriptor]];

結果

2021-09-30 22:18:06.529643+0800 TestOC[10875:200407] (
    3,
    5,
    6,
    8
)

插入與刪除 array 中特定的字串

準備一個 array

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"This",@"a",@"string", nil];

在 index = 1 插入 "is"

[array insertObject:@"is" atIndex:1];

NSLog(@"%@",array);
2021-09-30 22:42:34.140238+0800 TestOC[11046:214585] (
    This,
    is,
    a,
    string
)

與 Swift 不同的是,Objective-C 的 array 可以指定刪除哪個字,Swift 只能選擇位置

[array removeObject:@"This"];

NSLog(@"%@",array);
2021-09-30 22:42:34.140286+0800 TestOC[11046:214585] (
    is,
    a,
    string
)

判斷array裡面是否有特定字串

新增一個 array ,使用 containsObject 進行判斷

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"This",@"a",@"string", nil];
    
    if ([array containsObject:@"a"]) {
        NSLog(@"有 a 這個字串");
    }
2021-09-30 22:48:42.959230+0800 TestOC[11080:218077] 有 a 這個字串

上一篇
Day08 - Numbers
下一篇
Day 10 - Pointer(指標)
系列文
iOS 菜鳥工程師的30天 objective-C10

尚未有邦友留言

立即登入留言