Как инвертировать содержимое NSArray в Objective-C? - PullRequest
4 голосов
/ 27 августа 2010

Как инвертировать содержимое NSArray в Objective-C?

Предположим, у меня есть массив, который содержит эти данные

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 ]

30 голосов
/ 27 августа 2010
NSArray* reversed = [[originalArray reverseObjectEnumerator] allObjects];
4 голосов
/ 27 августа 2010

Выполните итерацию по вашему массиву в обратном порядке и создайте новый при этом:

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]];
}
0 голосов
/ 23 января 2015

Или Скала-путь:

-(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 @[];
}
...