macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

indexOfObject:inSortedRange:options:usingComparator:

INDEX>Foundation>NSArray

指定の範囲、オプションでNSComparatorブロックを使って、探したい要素の番号を返します。
- (NSUInteger)indexOfObject:(id)obj 
       inSortedRange:(NSRange)r 
          options:(NSBinarySearchingOptions)opts 
     usingComparator:(NSComparator)cmp

レゴ(R)シティ アンダーカバー

レゴ(R)シティ アンダーカバー

解説

指定の範囲、オプションでNSComparatorブロックを使って、探したい要素の番号を返します。

返り値

NSUInteger

探したい要素の配列内での番号

引数

(id)obj

配列で検索するオブジェクト
もしnilなら例外NSInvalidArgumentExceptionを起こします。

(NSRange)r 

探す範囲

(NSBinarySearchingOptions)opts

オプション

(NSComparator)cmp

比較するブロック

クラス

NSArray

使用可能

OS X 10.6
iOS4.0

参照

定義

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]);
    
}