使用简短的智能算法插入数组

时间:2012-01-22 12:30:24

标签: objective-c

我需要使用处于某个位置的值对数组进行排序,而其余的则具有一些初始位置。 我这样做的方式可能太长了。

我有:

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循环对于这个提议并不好,因为元素不是对称的。

谢谢。

1 个答案:

答案 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];

现在您可以在一个地方定义索引/值对,可以轻松编辑。