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 这个字串

<<:  [ Day 15 ] - 取得节点内资料的方法

>>:  DAY 15 - 哥布林 (2)

Day 28: 人工智慧在音乐领域的应用 (伦敦-Jukedeck、纽约-Amper Music 、OpenAI-Jukebox)

今天我们继续介绍一些比较知名的AI作曲的公司/软件。 Jukedeck Jukedeck可以说是AI...

[C#] 多个控制项共用Click事件

使用方法 //如果Type是Button if (sender.GetType().Name.Eq...

<Day1> 前言

简短自我介绍 大家好!我是Marshal,目前还是一位在校大学生,就读资讯相关科系。 为什麽会想选这...

Day 19 - 网页元素DOM - 表单元件的Event,表单的type 设定

制作表单 createRadio(); 沿用上一个文章的参考 加上以下设定 我们可以用radio去做...

[Day02] Tableau 轻松学 - Tableau 介绍

Tableau 优点 Tableau 是一种企业级的商业智能 (BI, Business Intel...