Хотел бы NSArray valueForKey возвращать индексы массива - PullRequest
1 голос
/ 22 декабря 2011

Я могу создать NSArray, который содержит все значения хеш-объектов в myArray, например:

NSArray *a = [myArray valueForKey:@"hash"];

Какой ключ я передаю valueForKey:, чтобы получитьмассив, содержащий индексы myArray?

Скажем, myArray имеет n элементов.Я хотел бы сделать что-то вроде этого:

NSArray *a = [myArray valueForKey:@"index"];

Ответы [ 3 ]

2 голосов
/ 23 декабря 2011
NSArray * arrayWithNumbersInRange( NSRange range )
{
    NSMutableArray * arr = [NSMutableArray array];
    NSUInteger i;
    for( i = range.location; i <= range.location + range.length; i++ ){
        [arr addObject:[NSNumber numberWithUnsignedInteger:i];
    }

    return arr;
}

NSArray * indexArray = arrayWithNumbersInRange((NSRange){0, [myArray length]-1});
1 голос
/ 22 декабря 2011

Вы можете запросить NSArray для индекса объекта с помощью indexOfObject:

NSArray *a = [myArray valueForKey:@"hash"];
NSInteger index = [myArray indexOfObject:a];
0 голосов
/ 17 января 2014

Создайте суперкласс NSArray, который возвращает индекс:

//
//  CapArrayOfIndex.h
//  Created by carmin politano on 7/26/12.
//  no rights reserved
//

@interface CapArrayOfIndex : NSArray {
    /*! Simulated constant array containing an array of NSNumber representing the index. */
    NSUInteger iCount;
    //*! NSNotFound causes bybass of index bounds testing. */
}
#pragma mark create
+ (CapArrayOfIndex*) withCount: (NSUInteger) aCount;
@end

и

//
//  CapArrayOfIndex.mm
//  Created by carmin on 7/26/12.
//  no rights reserved
//

#import "CapArrayOfIndex.h"

@implementation CapArrayOfIndex
#pragma mark NSCopying
- (id) copyWithZone: (NSZone*) aZone {
    /*! New allocation required because -count is a mutable property. */
    return [CapArrayOfIndex withCount: self.count];
}
#pragma mark create
+ (CapArrayOfIndex*) withCount: (NSUInteger) aCount {
    CapArrayOfIndex* zArray = self.alloc;
    zArray->iCount = aCount;
    return zArray;
}
#pragma mark NSArray
- (NSUInteger) count {
    return iCount;
}
- (void) setCount: (NSUInteger) aCount {
    iCount = aCount;
}
- (id) objectAtIndex: (NSUInteger) aIndex {
    /*! My code performs a bounds test using unusual macros: return [ViaUInteger RaiseIfObjectAtIndex(nil, self, aIndex, nil)]; */
    return [NSNumber numberWithInteger: aIndex];
}
@end
...