NSMutableArray簡單細說(三)—— 數(shù)組元素的增加

版本記錄

版本號 時間
V1.0 2017.08.26

前言

NSArray是數(shù)組的不變數(shù)組類,不邊數(shù)組在初始化的時候元素就是不變的酣栈,不能更改任何一個元素惰说,實際上我們用的較多的是可變數(shù)組,因為很多時候我們都需要對數(shù)組元素進行增刪改查岳服,其中增刪改也只有可變數(shù)組可以做剂公,也就是說可變數(shù)組相對來說更加靈活,這幾篇我們就說一下可變數(shù)組的這個類及其相關(guān)知識吊宋,還是老規(guī)矩從整體到局部纲辽,從淺入深進行講解,謝謝大家。感興趣的可以看我寫的上面幾篇拖吼。
1. NSMutableArray簡單細說(一)—— 整體了解
2. NSMutableArray簡單細說(二)—— 創(chuàng)建和初始化

一鳞上、- (void)addObject:(ObjectType)anObject;

該方法的作用是:在數(shù)組的末尾插入給定的對象。

下面看一下參數(shù):

  • anObject:將對象添加到數(shù)組的內(nèi)容的末尾吊档。 該值不能為零篙议。如果anObject為零,則引發(fā)NSInvalidArgumentException異常怠硼。

看簡單示例

- (void)demoAddObject
{
    NSMutableArray *arrM = [NSMutableArray array];
    [arrM addObject:@"hello"];
    NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}

下面看輸出結(jié)果

2017-08-26 20:18:41.376 JJOC[11456:294455] arrM = (
    hello
), count = 1

結(jié)論:可以加入非空對象鬼贱。


二、- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;

該方法的作用:將包含在另一個給定數(shù)組中的對象添加到接收數(shù)組的內(nèi)容的末尾香璃。

下面看簡單示例代碼这难。

- (void)demoAddObjectsFromArray
{
    NSArray *givenArr = @[@1, @2, @3, @4];
    NSMutableArray *arrM = [NSMutableArray array];
    [arrM addObjectsFromArray:givenArr];
    NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}

看輸出結(jié)果

2017-08-26 20:23:42.816 JJOC[11648:299402] arrM = (
    1,
    2,
    3,
    4
), count = 4

結(jié)論:根據(jù)給定數(shù)組給可變數(shù)組增加元素。


三增显、- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;

該方法的作用就是:在給定的索引中將給定對象插入到數(shù)組的內(nèi)容中雁佳。

下面就看一下參數(shù):

  • anObject:要添加到數(shù)組的內(nèi)容的對象。 該值不能為nil同云。如果anObject為nil糖权,則引發(fā)NSInvalidArgumentException異常。
  • index:要插入對象的數(shù)組中的索引炸站。 該值不能大于數(shù)組中的元素數(shù)星澳。如果索引大于數(shù)組中的元素數(shù)量,則引發(fā)NSRangeException旱易。

下面還要注意:

  • 如果索引已經(jīng)被占用禁偎,索引和其他對象將通過向索引添加1來移動,以騰出空間阀坏。

請注意如暖,NSArray對象不像C數(shù)組。 也就是說忌堂,即使您在創(chuàng)建數(shù)組時指定了大小盒至,指定的大小也被視為“提示”; 數(shù)組的實際大小仍為0.這意味著您不能在大于當前數(shù)組的索引的索引上插入對象。 例如士修,如果數(shù)組包含兩個對象枷遂,其大小為2,則可以在索引0,1或2處添加對象棋嘲。索引3是非法的酒唉,超出范圍; 如果您嘗試在索引3添加一個對象(當數(shù)組的大小為2時),NSMutableArray引發(fā)異常沸移。

下面看示例代碼

- (void)demoInsertObject
{
    NSMutableArray *arrM = [NSMutableArray array];
    [arrM insertObject:@"hello, world" atIndex:0];
    NSLog(@"arrM = %@, count = %ld", arrM, arrM.count);
}

下面看輸出結(jié)果

2017-08-26 20:32:45.194 JJOC[11930:309294] arrM = (
    "hello, world"
), count = 1

結(jié)論:數(shù)組中插入元素痪伦,可以隨便的安排數(shù)組元素的位置侄榴。


四、- (void)insertObjects:(NSArray<ObjectType> *)objects atIndexes:(NSIndexSet *)indexes;

該方法的作用是:將提供的數(shù)組中的對象插入到指定索引的接收數(shù)組中网沾。

下面看一下參數(shù):

  • objects:要插入到接收數(shù)組中的一組對象牲蜀。
  • indexes:要插入對象中的對象的索引。 索引中位置的計數(shù)必須等于對象的計數(shù)

還要注意:

  • 對象中的每個對象依次在索引中指定的相應(yīng)位置依次插入到接收數(shù)組中绅这。 實現(xiàn)在概念上類似于以下示例中所示:
- void insertObjects:(NSArray *)additions atIndexes:(NSIndexSet *)indexes
{
    NSUInteger currentIndex = [indexes firstIndex];
    NSUInteger i, count = [indexes count];
 
    for (i = 0; i < count; i++)
    {
        [self insertObject:[additions objectAtIndex:i] atIndex:currentIndex];
        currentIndex = [indexes indexGreaterThanIndex:currentIndex];
    }
}

由以下示例說明產(chǎn)生的行為:

NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", nil];
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:3];
[array insertObjects:newAdditions atIndexes:indexes];
NSLog(@"array: %@", array);
 
// Output: array: (one, a, two, b, three, four)

因此,如果一個位置指定陣列的計數(shù)或前面的插入之后的數(shù)組的計數(shù)在辆,并且超出邊界的其他位置以與該位置相鄰的方式進行证薇,則索引指定的位置可能只能超過接收陣列的范圍, 如以下實施例所示匆篓。

在此示例中浑度,兩個新對象都附加到數(shù)組的末尾。

NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", nil];
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:5];
[indexes addIndex:4];
[array insertObjects:newAdditions atIndexes:indexes];
NSLog(@"array: %@", array);
 
// Output: array: (one, two, three, four, a, b)

如果將[indexes addIndex:4]替換為[indexes addIndex:6](使索引為5和6)鸦概,則應(yīng)用程序?qū)⑹〔⒊霈F(xiàn)超出范圍的異常箩张。

在這個例子中,兩個對象被添加到數(shù)組的中間窗市,另一個在數(shù)組的當前端(索引4)先慷,這意味著它是從修改的數(shù)組的末尾開始的第三個。

NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", @"c", nil];
NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:1];
[indexes addIndex:2];
[indexes addIndex:4];
[array insertObjects:newAdditions atIndexes:indexes];
NSLog(@"array: %@", array);
 
// Output: array: (one, a, b, two, c, three, four)

如果用[indexes addIndex:6]替換[index addIndex:4](使索引為1,2和6)咨察,則輸出為(一论熙,a,b摄狱,二脓诡,三,四媒役,c)祝谚。

如果對象或索引為nil,此方法將引發(fā)異常酣衷。

下面看示例代碼

- (void)demoInsertObjects
{
    NSMutableArray *array = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];
    NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", @"c", nil];
    NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:1];
    [indexes addIndex:2];
    [indexes addIndex:4];
    [array insertObjects:newAdditions atIndexes:indexes];
    NSLog(@"array: %@", array);
}

下面看輸出結(jié)果

2017-08-26 20:48:50.816 JJOC[12416:327044] array: (
    one,
    a,
    b,
    two,
    c,
    three,
    four
)

結(jié)論:集體插入對象交惯,一勞永逸。

后記

未完鸥诽,待續(xù)~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末商玫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子牡借,更是在濱河造成了極大的恐慌拳昌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钠龙,死亡現(xiàn)場離奇詭異炬藤,居然都是意外死亡御铃,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門沈矿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來上真,“玉大人,你說我怎么就攤上這事羹膳∷ィ” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵陵像,是天一觀的道長就珠。 經(jīng)常有香客問我醒颖,道長,這世上最難降的妖魔是什么泞歉? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮榛丢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涕滋。我一直安慰自己,他們只是感情好宾肺,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布侵俗。 她就那樣靜靜地躺著,像睡著了一般隘谣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寻歧,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天,我揣著相機與錄音猾封,去河邊找鬼。 笑死晌缘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的磷箕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芒填,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氢烘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎椎工,沒想到半個月后饭于,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體维蒙,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年颅痊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斑响。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舰罚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情营罢,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布饲漾,位于F島的核電站,受9級特大地震影響考传,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僚楞,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一敌土、第九天 我趴在偏房一處隱蔽的房頂上張望运翼。 院中可真熱鬧,春花似錦血淌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乳蓄。三九已至夕膀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間产舞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工耻煤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哈蝇。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像买鸽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子眼五,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容