2011-12-22 1 views
1

私はこのようなmyArray内のオブジェクトのすべてのハッシュ値が含まれているNSArrayを作成することができ、配列のインデックスを返すようにNSArrayのvalueForKeyをご希望:

私は配列を取得するために valueForKey:に渡すんどのようなキー
NSArray *a = [myArray valueForKey:@"hash"]; 

myArrayのインデックスを含んでいますか?

Say 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

あなたはindexOfObject:

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

これは質問に答えていません。 n個のオブジェクトを持つ配列があれば、整数 '0,1 ... n-1'を含む配列を作成したいと思います。 – SundayMonday

+2

配列のキーは常に0 - > count - 1の順であり、カカオオブジェクトではないので、あなたが求めているものを返すメソッドはありません。 – Jessedc

0

とオブジェクトのインデックスのためにNSArrayを照会することができますのスーパークラスを作成します。インデックスを返す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