2011-12-22 52 views
1

我可以创建一个包含myArray对象的所有哈希值这样的NSArray想NSArray的valueForKey返回数组索引

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

我传递给valueForKey:什么键获得一个数组包含myArray的索引?

说myArray有n项。我想要做这样的事情:

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

回答

2
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

您可以查询一个NSArray为对象的指数与indexOfObject:

NSArray *a = [myArray valueForKey:@"hash"]; 
NSInteger index = [myArray indexOfObject:a]; 
+1

这不回答这个问题。给定一个包含n个对象的数组,我想创建一个包含整数'0,1 ... n-1'的数组。 – SundayMonday 2011-12-22 01:36:44

+2

数组中的键总是按顺序从0 - > count - 1,它们不是可可对象,因此不会返回所要求的方法。 – Jessedc 2011-12-22 02:04:10

0

创建的超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 
+0

此版本已经过测试。它应该可以自动合成属性计数(删除它的实例变量和方法),但我现在不使用此代码(现在不能测试修改)。 – carmin 2014-01-17 00:51:49