iOS數(shù)組中添加唯一對象(判斷重復對象)

遇到的問題

需求是我需要在一個數(shù)組cellModelArray中添加許多對象(這些對象都是自定義模型類的model),獲取的數(shù)據(jù)源中可能包含N個相同的模型良狈,現(xiàn)在往cellModelArray這個數(shù)組中添加對象之前要檢驗一下該數(shù)組中是否已經包含一個相同的對象稼跳,如果不存在煮寡,才添加楞黄。

分析

如果一個數(shù)組里面包含的對象都是諸如NSString涝影,NSNumber這樣的元素,直接用cocoa提供的API就能直接判斷數(shù)組是否包含給定的元素魄眉,但是對于自己定義的數(shù)據(jù)模型砰盐,就不是俺么簡單了。我的解決辦法是遍歷原數(shù)組坑律,根據(jù)數(shù)據(jù)模型里能唯一標識該對象的某一個屬性判斷是否已存在相同的元素,需要聲明一個BOOL值記錄判斷結果岩梳。

主要代碼如下:

 __block BOOL isExist = NO;
 [self.cellModelArray enumerateObjectsUsingBlock:^(WorkerEvaluateModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if ([obj.workerName isEqualToString:cellModel.workerName]) {//數(shù)組中已經存在該對象
                *stop = YES;
                isExist = YES;
          }
}];
if (!isExist) {//如果不存在就添加進去
[self.cellModelArray addObject:cellModel];
}```
###引申
其實這里可以引出一個關于怎么判斷相等的問題,深入研究起來還是挺復雜的晃择,這里貼一篇干貨文章:[Thompson的文章](http://nshipster.com/equality/)
總之冀值,就是在比較兩個對象是否相等或者是判斷一個對象是否在一個collection里面的時候,就要特別注意:
>- 對于普通的NSObject比較用isEqual:方法比較hash宫屠,上面那個文章的Thompson大叔說比較的是內存地址(我覺得挺有道理的不然普通的兩個對象還在哪里有可比性==)

>- 對于Foundation里面的NSObject的子類如NSString列疗、NSData、NSDate等(詳細地還是看文章哈浪蹂,反正沒有NSArray╮(╯▽╰)╭)抵栈,有定義相應的判斷方法,所以用的話盡量采用子類中的比較方法

>- 對于自己定義的類的話坤次,如果要用到比較古劲,就要重新實現(xiàn)isEqual:和hash方法,實現(xiàn)的方法還有栗子什么Thompson大叔也說了缰猴,嗯不然會很容易悲劇的╮(╯_╰)╭

######備注:使用快速枚舉for-in或者enumerate枚舉器對數(shù)組進行遍歷時不能修改數(shù)組(包括增加产艾,刪除和給對象賦值等操作),如果執(zhí)意如此滑绒,便會報錯胰舆,拋異常如下:
    *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x7c873ea0> was mutated while being enumerated.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹬挤,隨后出現(xiàn)的幾起案子缚窿,更是在濱河造成了極大的恐慌,老刑警劉巖焰扳,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倦零,死亡現(xiàn)場離奇詭異,居然都是意外死亡吨悍,警方通過查閱死者的電腦和手機扫茅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來育瓜,“玉大人葫隙,你說我怎么就攤上這事□锍穑” “怎么了恋脚?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵腺办,是天一觀的道長。 經常有香客問我糟描,道長怀喉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任船响,我火速辦了婚禮躬拢,結果婚禮上,老公的妹妹穿的比我還像新娘见间。我一直安慰自己聊闯,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布米诉。 她就那樣靜靜地躺著菱蔬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荒辕。 梳的紋絲不亂的頭發(fā)上汗销,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音抵窒,去河邊找鬼弛针。 笑死,一個胖子當著我的面吹牛李皇,可吹牛的內容都是我干的削茁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼掉房,長吁一口氣:“原來是場噩夢啊……” “哼茧跋!你這毒婦竟也來了?” 一聲冷哼從身側響起卓囚,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤瘾杭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哪亿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粥烁,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年蝇棉,在試婚紗的時候發(fā)現(xiàn)自己被綠了讨阻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡篡殷,死狀恐怖钝吮,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤奇瘦,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布棘催,位于F島的核電站,受9級特大地震影響链患,放射性物質發(fā)生泄漏巧鸭。R本人自食惡果不足惜瓶您,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一麻捻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呀袱,春花似錦贸毕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寇僧,卻和暖如春摊腋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嘁傀。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工兴蒸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人细办。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓橙凳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笑撞。 傳聞我的和親對象是個殘疾皇子岛啸,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容

  • 前言 對數(shù)據(jù)的等同性判斷包括對基本數(shù)據(jù)類型等同性的判斷和對象等同性的判斷。對基本數(shù)據(jù)類型等同性的判斷是非常簡單的茴肥,...
    VV木公子閱讀 1,463評論 0 8
  • 翻譯自“Collection View Programming Guide for iOS” 0 關于iOS集合視...
    lakerszhy閱讀 3,860評論 1 22
  • 攻略上秋天的喀納斯有馬匹坚踩、叢林、河流瓤狐,廣袤的天空瞬铸,如錦如畫,前行的計劃卻一拖再拖芬首,從秋天到冬天赴捞,幾乎成了心里的...
    方小兮閱讀 198評論 0 0
  • 不是所有的開心都如你所看到那樣,發(fā)自肺腑郁稍。也不是所有的心狠都如你所聽到那樣赦政,冰似寒鐵。更不是所有的眼淚都要停留眼眶...
    酒與故事yj閱讀 298評論 0 1
  • 在某些內心孤單的日子里,心里總會有些異常恢着,與你處于何種環(huán)境桐愉,做著什么樣的工作無關,只是心靈在打著冷顫掰派。在那些日子里...
    星雨飛海閱讀 230評論 2 0