我有一个NSArray,我想把它分成两个相等的部分(如果奇数“计数”,然后添加到后者的新阵列) - 我想分裂它“中间”可以这么说。如何将一个NSArray分成两个相等的部分?
下面的代码不正是我想要的,但有没有更好的办法?:
// NOTE: `NSArray testableArray` is an NSArray of objects from a class defined elsewhere;
NSMutableArray *leftArray = [[NSMutableArray alloc] init];
NSMutableArray *rightArray = [[NSMutableArray alloc] init];
for (int i=0; i < [testableArray count]; i=i+1) {
if (i < [testableArray count]/2) {
[leftArray addObject:[testableArray objectAtIndex:i]];
}
else {
[rightArray addObject:[testableArray objectAtIndex:i]];
}
}
一旦leftArray和rightArray制成,我不会改变他们,所以他们并不需要“可变”。我认为有可能是完成与ObjectsAtIndexes方法或一些快速列举方法上面的代码的方式?,但我不能让下面的代码工作(或其他变化):
NSArray *leftArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
NSArray *rightArray = [[NSArray alloc] initWithObjects:[testableArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(????, ????)]]];
有谁知道,如果我我正朝着正确的方向走,还是指向正确的方向?
谢谢!
亚历克斯,感谢您的超快反应(S)! 你的第二个解决方案要好得多。我觉得我太执着于实施NSRange,你在上面的例子中也非常清楚地阐明了这一点! – 2009-11-20 03:30:32
这里有一个错误。没有必要+1。例如: 由6个元素组成的数组。 第一个NSRange应该是{0,3} 第二个NSRange应该是{3,3}。在你的情况下,你会得到一个例外,因为第二个范围将超出范围{4,3}。 – 2013-10-09 19:03:50
谢谢,斯塔斯。我修复了这段代码。例如: NSArray * firstHalf = [wholeArray subarrayWithRange:NSMakeRange(0,[wholeArray count]/2)];使用NSMakeRange可以使用较少的线条执行此操作,例如: – 2013-10-10 00:10:51