我想NSMutableArray
使用insertObjects:atIndexes
,在一次操作中将一系列项目插入,然后同时对项目进行排序-但我无法弄清楚如何构建正确的项目NSIndexSet
。像这样:
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);
苹果文档并没有真正解释它是如何工作的-但是它意味着索引集将被顺序处理...如果是这种情况,那么从逻辑上我应该这样做:
[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
-的结果不正确@[@0, @50, @10, @100]
2, 1
-这也有不正确的结果@[@0, @50, @10, @100]
这可能吗?我可以通过在插入项目之前对项目列表进行预排序来解决此问题,但是不必创建列表的临时副本会很好
一个NSIndexSet
只包含“独特的无符号整数”,存储“作为排序的区间”。您正在尝试使用索引集将无法正常工作。
如果使用数组代替保存索引,则可以并行遍历值和索引并insertObject:atIndex:
重复使用。通过将类别方法添加到可以简化此过程NSMutableArray
,例如,OEInsertObjects:atOrderedIndexes:
然后您的第一种方法(在索引1处重复插入)将起作用,尽管这对我来说似乎很奇怪,因为您始终必须考虑运动。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句