2011-09-14 174 views
0

我想從字典中添加項目到可變數組。問題是我想在添加新項目之前檢查現有的數組項目。如果數組中已有相同的項目,我想替換它。否則添加新的項目。 我該怎麼辦?將對象添加到可變數組

+0

使用'NSMutableSet' –

回答

1

您可以將[yourArray indexOfObject:yourObject];的結果與NSNotFound的結果進行比較,以確定該對象是否在陣列中。
它會給你要替換的對象的索引,或者如果它等於NSNotFound,你會添加它。
對象平等使用isEqual:方法進行測試。
NSArray class reference

2

你也許可以使用NSMutableSet而不是NSMutableArray。 NSMutableSet上的addObject方法只會「將給定的對象添加到該集合,如果它不是成員。」

如果您想加入到設置反正之前檢查的會員,您可以檢查的結果是:

[mySet containsObject:myObjectFromDictionary]

...返回指示該組是否已經包含了一個簡單的布爾值當對象傳遞給它的對象的isEqual方法返回true。

(一點點額外的功能,NSCountedSet將跟蹤對象的數量添加到「設置」爲這isEqual:返回true)

+0

如果新的對象,這將工作不需要替換舊的項目; NSMutableSet給出了數組中的原始對象優先順序,而聽起來好像OP希望新對象具有優先順序 - 但也許OP會考慮是否必須更換舊對象。 – matthias

+0

如果新對象和原始對象在'isEqual:'時回答'YES',實際上它們並不相等,那麼OP就會有遠遠超過這個問題的嚴重問題...... – bbum

1

在它的面前,無論是文森特和豐富的答案是正確的。

但是,原始問題中存在一個概念性問題,尚未得到解決。

即,通過indexOfObject:(或集合中的containsObject:)的「成員數組」通過使用isEqual:比較兩個對象最終完成。

如果isEqual:返回YES,那麼這兩個對象在代碼中功能完全相同,否則在設計和實現中會出現其他更嚴重的問題。

因此,真正的問題應該是是「如何檢測對象是否已經在數組中而不添加它?」 Rich和Vincent的回答都是正確的。

I.e.你只需要檢查是否存在,如果存在的話,不採取任何行動。

(請注意,有些情況下更換實際上是保證深奧的情況,但他們都是真正的深奧和不是一般的可變集合的上下文中使用)

+1

同意。很多功能可以依賴於isEqual的正確實現。有關於此問題的一篇很棒的SO帖子[這裏](http://stackoverflow.com/questions/1112373/implementing-hash-isequal-isequalto-for-objective-c-collections)。 (另外,只是簡單的說明,NSArray也支持'containsObject'方法,與NSSet一樣,它返回一個BOOL。) –