在保留原始数组顺序的同时合并两个数组

我已经写了一个应用程序,要求从外部来源(Twitter)的数据,这是按时间顺序作为有序数组返回:

外部arrays

  1. 项目A(最新)
  2. B项
  3. 项目C
  4. 项目D(最久)

我将这些项目添加到保存相同的顺序的另一个数组:

我的arrays

  1. 项目A(最新)
  2. B项
  3. 项目C
  4. 项目D(最久)

然后我再次查询外部源并接收另一个新项目的数组,它看起来像这样:

新的外部数组

  1. 项目E(最新)
  2. 项目F
  3. 项目G
  4. 项目H

我将它们添加到我的数组,并得到这个:

我的arrays

  1. 项目A
  2. B项
  3. 项目C
  4. 项目D(最久)
  5. 项目E(最新)
  6. 项目F
  7. 项目G
  8. 项目H

问题是外部数组数据按时间顺序sorting,最新的项目最初是A,因为现在进行更新E.所以你可以看到数组的sorting现在是错误的,我需要的是:

我的arrays

  1. 项目E(最新)
  2. 项目F
  3. 项目G
  4. 项目H
  5. 项目A
  6. B项
  7. 项目C
  8. 项目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]; } 

这样你将得到你需要的数组

干杯