在保留原始数组顺序的同时合并两个数组
我已经写了一个应用程序,要求从外部来源(Twitter)的数据,这是按时间顺序作为有序数组返回:
外部arrays
- 项目A(最新)
- B项
- 项目C
- 项目D(最久)
我将这些项目添加到保存相同的顺序的另一个数组:
我的arrays
- 项目A(最新)
- B项
- 项目C
- 项目D(最久)
然后我再次查询外部源并接收另一个新项目的数组,它看起来像这样:
新的外部数组
- 项目E(最新)
- 项目F
- 项目G
- 项目H
我将它们添加到我的数组,并得到这个:
我的arrays
- 项目A
- B项
- 项目C
- 项目D(最久)
- 项目E(最新)
- 项目F
- 项目G
- 项目H
问题是外部数组数据按时间顺序sorting,最新的项目最初是A,因为现在进行更新E.所以你可以看到数组的sorting现在是错误的,我需要的是:
我的arrays
- 项目E(最新)
- 项目F
- 项目G
- 项目H
- 项目A
- B项
- 项目C
- 项目D(最久)
我的代码目前看起来像这样:
NSMutableArray *myArray = [[NSMutableArray alloc] init]; ... - (void)getDataFromExternalSource:(NSArray *)externalArray { for(NSDictionary *item in externalArray) { // Need loop so I can do some extra stuff here with each item object (not shown in this example.) [myArray addObject: item]; } }
NSArray *newArray = [externalArray arrayByAddingObjectsFromArray:myArray]; [myArray release]; myArray = [newArray mutableCopy];
任何理由不这样做?
只需使用新的数组作为第一个数组,然后添加旧的项目。
NSMutableArray *newArray = [NSMutableArray arrayWithCapacity:externalArray.count + myArray.count]; for(NSDictionary *item in externalArray) { // Need loop so I can do some extra stuff here with each item object (not shown in this example.) [newArray addObject: item]; } [newArray addObjectsFromArray:myArray];
你应该使用数组作为堆栈,所以旧的项目被推到新的下面。 你可以通过使用[myArray addObject:newObject];
添加最后一个位置的每个元素来实现[myArray addObject:newObject];
。 您将不得不在原始数组中向后迭代,以便从最旧到最新插入它们。 你可以做到这一点:
for(NSUInteger index = [newArray count] - 1; i == 0; i--) { NSDictionary*object = [newArray objectAtIndex:index]; [myArray addObject:object]; }
这样你将得到你需要的数组
干杯