indexOfObject:inSortedRange:options:usingComparator:
INDEX>Foundation>NSArray
指定の範囲、オプションでNSComparatorブロックを使って、探したい要素の番号を返します。
- (NSUInteger)indexOfObject:(id)obj inSortedRange:(NSRange)r options:(NSBinarySearchingOptions)opts usingComparator:(NSComparator)cmp
- 出版社/メーカー: 任天堂
- 発売日: 2013/07/25
- メディア: Video Game
- この商品を含むブログ (6件) を見る
解説
指定の範囲、オプションでNSComparatorブロックを使って、探したい要素の番号を返します。
返り値
NSUInteger
探したい要素の配列内での番号
引数
(id)obj
配列で検索するオブジェクト
もしnilなら例外NSInvalidArgumentExceptionを起こします。
(NSRange)r
探す範囲
(NSBinarySearchingOptions)opts
オプション
(NSComparator)cmp
比較するブロック
フレームワーク
Foundation
クラス
NSArray
参照
定義
NSArray.h
例文
#pragma mark indexOfObject:inSortedRange:options:usingComparator: -(void)method036 { // テストデータの範囲 NSUInteger amount = 900000; // 探すデータ NSNumber* number = [NSNumber numberWithInt:724242]; // Create some array. NSMutableArray* anArray = [NSMutableArray arrayWithCapacity:amount]; for (NSUInteger i = 0; i < amount; ++i) {; [anArray addObject:[NSNumber numberWithUnsignedInteger:i]]; } // NSUInteger index1 = [anArray indexOfObject:number inSortedRange:NSMakeRange(0, [anArray count]) options:NSBinarySearchingFirstEqual usingComparator:^(id obj1,id obj2) { NSInteger iVal1 = [obj1 integerValue]; NSInteger iVal2 = [obj2 integerValue]; if (iVal1 < iVal2) return NSOrderedAscending; else if (iVal1 > iVal2) return NSOrderedDescending; else return NSOrderedSame; }]; NSLog(@"%s %d",__FUNCTION__ ,index1); }
クラスの検索
#pragma mark indexOfObject:inSortedRange:options:usingComparator: -(void)method037 { // テストデータの範囲 NSUInteger amount = 900000; NSMutableArray* anArray = [NSMutableArray arrayWithCapacity:amount]; for (NSUInteger i = 0; i < amount; ++i) {; CustomClass *customClass = [[CustomClass alloc] init]; NSMutableString *muStr = [[NSMutableString alloc] initWithCapacity:0]; [muStr appendFormat:@"string%d",i]; [customClass setCustomClassValue:muStr]; [customClass setCustomNumber:[NSNumber numberWithUnsignedInteger:i]]; [anArray addObject:customClass]; } // 探すデータ NSNumber* number = [NSNumber numberWithInt:824242]; CustomClass *searchObj = [[CustomClass alloc] init]; NSMutableString *muStr = [[NSMutableString alloc] initWithCapacity:0]; [muStr appendFormat:@"string%d",[number integerValue]]; [searchObj setCustomClassValue:muStr]; [searchObj setCustomNumber:number]; // NSUInteger index1 = [anArray indexOfObject:searchObj inSortedRange:NSMakeRange(0, [anArray count]) options:NSBinarySearchingFirstEqual usingComparator:^(id obj1,id obj2) { NSInteger iVal1 = [[obj1 customNumber] integerValue]; NSInteger iVal2 = [[obj2 customNumber] integerValue]; if (iVal1 < iVal2) return NSOrderedAscending; else if (iVal1 > iVal2) return NSOrderedDescending; else return NSOrderedSame; }]; NSLog(@"%s %@",__FUNCTION__ ,[(CustomClass *)[anArray objectAtIndex:index1] customClassValue]); }