我有一個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