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

时间:2011-04-28 08:20:43

标签: objective-c arrays ios

我正在编写一个请求来自外部源(Twitter)的数据的应用程序,它按时间顺序作为有序数组返回:

外部阵列

  1. 项目A(最新)
  2. 项目B
  3. 项目C
  4. 项目D(最旧)
  5. 我将这些项目添加到另一个保持相同顺序的数组:

    我的阵列

    1. 项目A(最新)
    2. 项目B
    3. 项目C
    4. 项目D(最旧)
    5. 然后我再次查询外部源并接收另一个新项目数组,如下所示:

      新外部阵列

      1. 项目E(最新)
      2. 项目F
      3. 项目G
      4. 项目H
      5. 我将它们添加到我的数组中并得到它:

        我的阵列

        1. 项目A
        2. 项目B
        3. 项目C
        4. 项目D(最旧)
        5. 项目E(最新)
        6. 项目F
        7. 项目G
        8. 项目H
        9. 问题是外部数组数据是按照时间顺序排序的,最初的项目最初是A,因为现在进行了更新。所以你可以看到数组的排序现在是错误的,我需要的是:

          我的阵列

          1. 项目E(最新)
          2. 项目F
          3. 项目G
          4. 项目H
          5. 项目A
          6. 项目B
          7. 项目C
          8. 项目D(最旧)
          9. 我的代码目前看起来像这样:

            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];
            }   
            }
            

3 个答案:

答案 0 :(得分:4)

NSArray *newArray = [externalArray arrayByAddingObjectsFromArray:myArray];
[myArray release];
myArray = [newArray mutableCopy];

有什么理由不这样做?

答案 1 :(得分:1)

只需将新数组用作第一个数组,然后添加旧项目。

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

答案 2 :(得分:0)

您应该将数组用作堆栈,因此旧项目会被推到新项目之下。你可以通过使用[myArray addObject:newObject];添加最后位置的每个元素来实现这一点。您必须在原始数组中向后迭代才能将它们从最旧到最新插入。您可以通过执行以下操作来实现:

for(NSUInteger index = [newArray count] - 1; i == 0; i--)
{
    NSDictionary*object = [newArray objectAtIndex:index];
    [myArray addObject:object];
}

通过这种方式,您将获得所需的阵列

干杯