代码之家  ›  专栏  ›  技术社区  ›  suse

如何反算目标C中的非数组内容?

  •  4
  • suse  · 技术社区  · 14 年前

    如何在Objective-C中反转nsarray的内容?

    假设我有一个保存这些数据的数组

    NSArray arrayObj = [[NSArray alloc]init];
    arrayObj atindex 0 holds this: "1972"
    arrayObj atindex 1 holds this: "2005"
    arrayObj atindex 2 holds this: "2006"
    arrayObj atindex 3 holds this: "2007"
    
    Now i want to inverse the order of array like this:
    
    arrayObj atindex 0 holds this: "2007"
    arrayObj atindex 1 holds this: "2006"
    arrayObj atindex 2 holds this: "2005"
    arrayObj atindex 3 holds this: "1972"
    

    如何做到这一点??

    谢谢您。

    3 回复  |  直到 10 年前
        1
  •  30
  •   ig2r    14 年前
    NSArray* reversed = [[originalArray reverseObjectEnumerator] allObjects];
    
        2
  •  4
  •   Gauloises    14 年前

    按相反顺序迭代数组,并在执行此操作时创建一个新数组:

    NSArray *originalArray = [NSArray arrayWithObjects:@"1997", @"2005", @"2006", @"2007",nil];
    
    NSMutableArray *newArray = [[NSMutableArray alloc] initWithObjects:nil];
    
    for (int i = [originalArray count]-1; i>=0; --i)
    {
        [newArray addObject:[originalArray objectAtIndex:i]];
    }
    
        3
  •  0
  •   Hugo Stieglitz    10 年前

    或者斯卡拉的方式:

    -(NSArray *)reverse
    {
        if ( self.count < 2 )
            return self;
        else
            return [[self.tail reverse] concat:[NSArray arrayWithObject:self.head]];
    }
    
    -(id)head
    {
        return self.firstObject;
    }
    
    -(NSArray *)tail
    {
        if ( self.count > 1 )
            return [self subarrayWithRange:NSMakeRange(1, self.count - 1)];
        else
            return @[];
    }
    
    推荐文章