2014-02-10 84 views
1

我想通過insertObjects:atIndexes單個操作將一系列項目插入到NSMutableArray中,並同時對這些項目進行排序 - 但我無法弄清楚如何構建正確的NSIndexSet。事情是這樣的:我可以使用NSMutableArray insertObjects:atIndexes以不同的順序插入多個項目嗎?

NSMutableArray* target = [[NSMutableArray alloc]initWithObjects:@0, @100, nil]; 
NSArray* itemsToInsert = @[@50, @10]; 

NSMutableIndexSet* indexes = [[NSMutableIndexSet alloc] init]; 
// ??? what goes in indexes? 

[target insertObjects:itemsToInsert atIndexes:indexes]; 
XCTAssertEqualObjects((@[@0, @10, @50, @100]), target); 

The apple documentation並沒有真正解釋它是如何工作 - 但它意味着指標集將要處理的順序......如果是這樣的話,那麼在邏輯上我應該這樣做:

[indexes addIndex:1]; // insert @50 at position 1 
[indexes addIndex:1]; // insert @10 at position 1, pushing @50 up to position 1 

的問題是,這並不工作 - 插入投用[NSMutableArray insertObjects:atIndexes:]: count of array (2) differs from count of index set (1)

例外,我也試過:

  • 插入索引範圍 - 其失敗,出現相同的異常
  • 插入的1, 2索引 - 這具有2, 1@[@0, @50, @10, @100]
  • 插入索引的一個不正確的結果 - 這具有@[@0, @50, @10, @100]
一個不正確的結果

這可能嗎?我可以通過預先分揀物品的清單之前,我把它們插入解決它,但它會是不錯不具有創建列表

+1

也許我不理解你的具體需求,但不是更容易在數組的末尾添加新項目,然後使用其中一種排序函數對數組進行排序? – Merlevede

+0

我有一個永久排序的數組,其中新增項目總是插入正確的索引。當你有數以千計的項目時,這比重新排列整個數組效率更高效。乾杯 –

回答

1

NSIndexSet只包含「獨特無符號整數」的臨時副本,存儲「作爲排序的範圍」。你想用索引集做什麼都行不通。

如果您使用數組來代替索引,則可以並行循環訪問值和索引,並重復使用insertObject:atIndex:。通過向NSMutableArray添加一個類別方法,比如OEInsertObjects:atOrderedIndexes:,這樣做會更簡單。然後,您的第一個方法,即重複插入索引1,將起作用,儘管這對我來說似乎很陌生,因爲您始終必須考慮這些動作。

相關問題