コレクションにプログラム定義関数を適用


コレクションの特に有用な機能は、コレクションオブジェクト内の各値にプログラム定義の関数を適用する機能です。この適合 (applier) 関数は、各コレクション型に対して定義されたプロトタイプに準拠しているなければなりません。この関数へのポインタは、含まれる各値で呼び出すコレクション関数 (CFTypeApplyFunction の形式) で指定しなければなりません。


リスト 1 は、CFArray オブジェクトに格納されている CFString オブジェクトに文字数計算関数を適用する簡単な例を示しています。この関数の型は CFArrayApplierFunction です。このプロトタイプには2つのパラメータがあります。最初は配列の値 (またはその値へのポインタ) で、2 番目はプログラム定義の値 (またはその値へのポインタ) です。


リスト 1 : 配列への関数の適用


void countCharacters(const void *val, void *context) {
    CFStringRef str = (CFStringRef)val;
    CFIndex *cnt = (CFIndex *)context;
    CFIndex numchars = CFStringGetLength(str);
    *cnt += numchars;
}
 
void countCharsInArray() {
    CFStringRef strs[3];
    CFArrayRef anArray;
    CFIndex count=0;
 
    strs[0] = CFSTR("String One");
    strs[1] = CFSTR("String Two");
    strs[2] = CFSTR("String Three");
 
    anArray = CFArrayCreate(NULL, (void *)strs, 3, &kCFTypeArrayCallBacks);
    CFArrayApplyFunction(anArray, CFRangeMake(0,CFArrayGetCount(anArray)),
     countCharacters, &count);
    printf("The number of characters in the array is %d", count);
    CFRelease(anArray);
}


多くの場合、適合関数を使用して、変更可能なコレクションを反復処理し、特定の基準に一致するオブジェクトを削除します。適合関数がそれを反復している間にコレクションを変更することは決して安全ではありません。ただし、適合関数を使用してコレクションを変更するには、いくつか安全な方法があります。


どのアプローチがより簡単かは、状況によって異なります。オリジナルのコレクションが不変の場合は、バリエーションを使用できます。


前の章 次の章



目次
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)