コレクションの検索


Core Foundation には、コレクションオブジェクトの値 (および CFDictionary の場合はキー) を検索するためのいくつかのプログラミングインターフェイスが含まれています。コレクションの値を取得 で説明したように、CFTypeGetValueIfPresent 関数は、辞書、セット、およびバッグの値の存在をレポートします。名前に "Contains" のある関数も使用して、コレクションが値またはキーを保持しているかどうかを判断することもできます。リスト 1 は、CFDictionaryContainsKey 関数の使用方法を示しています。


リスト 1 : CFDictionary オブジェクトでキーの検索


if (CFDictionaryContainsKey(mappingTable, (const void*)lowerCharsetName)) {
    result = (CFStringEncoding)CFDictionaryGetValue(mappingTable,
     (const void*)lowerCharsetName);
}


CFArray オブジェクトの場合、CFArrayBSearchValues 関数はより洗練された検索オプションを提供します。この関数は、バイナリ検索アルゴリズムを使用して、ソートされた配列内の指定された値を検索します。値がコレクション内に存在しない場合、関数はそれがどこに行ってしまったかを指示します。CFArrayBSearchValues 関数はソートされた変更可能な配列をソートされた状態に保つのに役立ちます。リスト 2 は、この関数の呼び出し方法を示しています。


リスト 2 : CFArray オブジェクト内で値の検索


CFIndex position = CFArrayBSearchValues(aMutArray,
 CFRangeMake(0,CFArrayGetCount(anArray)), 
 (const void *)CFSTR("String Three"), CFStringCompare, 0);


CFArrayBSearchValues 関数の 4 番目のパラメータは、CFComparatorFunction 型に準拠する関数へのポインタでなければなりません。このコンパレータ関数は、配列内の値を比較する方法を知っているはずです。この例では CFStringCompareCFComparatorFunction に準拠しており、CFString の値を比較する方法を知っているため使用されています。CFNumberCompareCFDateCompare など、使用できるその他の既に定義された Core Foundation のコンパレータ関数があります。


上記の呼び出しが返ってくると、関数の CFIndex の結果は次のいずれかを示します:


CFArrayContainsValue を使用して、結果がリストされている案のうち最初のものかどうかを判断できます。


CFTree 型は、含まれている値 (つまり、サブツリー) を検索するための異なるグループの関数を定義します。詳細については、コレクションの作成とコピー を参照してください。


前の章 次の章



目次
Xcode の新機能

  • 序文
  • この文書の構成
  • コレクションの共通の特徴
  • 動作は呼び出し関数によって決定される
    大部分のコレクションが変更不可能な変種を提供
  • コレクションの型
  • 配列
    辞書
    セットとバッグ
    樹 (Trees)
    コレクションのカスタマイズ
  • コレクションの作成とコピー
  • カスタムコレクション呼び出し関数の定義
    コレクションの値を取得
    コレクションの検索
    変更可能なコレクションの操作
    コレクションにプログラム定義関数を適用
  • 樹構造の作成と使用
  • CFTree オブジェクトの作成
    親に樹を追加する
    子の樹の取得
    CFTree 構造体でのその他の操作
    文書改訂履歴












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)












    トップへ(Core Foundation)