我需要使用处于某个位置的值对数组进行排序,而其余的则具有一些初始位置。 我这样做的方式可能太长了。
我有:for(int i=0;i<100;i++)
[whatBondInFrame addObject:@"no"];
[whatBondInFrame insertObject:@"red" atIndex:0];
[whatBondInFrame insertObject:@"red" atIndex:1];
[whatBondInFrame insertObject:@"red" atIndex:2];
[whatBondInFrame insertObject:@"gray" atIndex:10];
[whatBondInFrame insertObject:@"gray" atIndex:11];
[whatBondInFrame insertObject:@"gray" atIndex:12];
[whatBondInFrame insertObject:@"red" atIndex:20];
[whatBondInFrame insertObject:@"red" atIndex:21];
[whatBondInFrame insertObject:@"red" atIndex:22];
它的工作,但如果我想要更多,我将需要更多的线。 现在,如果我使用这样的东西:
whatBondInFrame = [NSArray arrayWithObjects: @"Red", @"Green", @"Blue", @"Yellow", nil];
它会抹掉我拥有的一切,而且我不能把它们放在正确的索引中。
是否有另一个api将对象放在1行的索引处(例如这个但是带索引?)
for循环对于这个提议并不好,因为元素不是对称的。
谢谢。
答案 0 :(得分:1)
你想要做的最接近的api是NSMutableArray
:
- (void)replaceObjectsAtIndexes:(NSIndexSet *)indexes withObjects:(NSArray *)objects
但是,没有“一行”方法可以从不相交的索引集合中创建NSIndexSet
。
您是否真的关注“一行”(如果是这样?为什么?),或者过度维护一组常量索引/值对以便轻松插入?如果是后者,你可以使用类似的东西:
typedef struct { NSUInteger index, NSString *value } IndexValue;
IndexValue entries[] = { {0, @"red"}, {10, @"gray}, ... };
int count = sizeof(entries) / sizeof(IndexValue); // number of elements in the array
for(int ix = 0; ix < count; ix++)
[whatBondInFrame replaceObjectAtIndex:entries[ix].index withObject:entries[ix].value];
现在您可以在一个地方定义索引/值对,可以轻松编辑。