変更可能なコレクションの操作
コレクションの不透明型 CFArray、CFDictionary、CFSet、および CFBag は、値の追加、値の削除、値の置き換えなど、変更可能なコレクションに含まれる値を操作するための同様の関数のセットを提供します。コレクションがキーと値の一意性を保証するかどうかによって、動作にいくらかの違いがあります。表 1 に、変更可能な関数の動作をまとめました。"操作" 列は、CFDictionaryReplaceValue の "Replace" などの変更可能関数にあるパラメータを使用する、操作の型を識別しています。
表 1 : 変更可能コレクションの操作の意味
操作 | コレクションの型 | どんな意味があるか |
---|---|---|
追加(Append) | CFArray | 他のすべての値の後に値を挿入 (index = count)。 |
挿入 | CFArray | コレクションの与えられたインデックスに値を挿入。 |
追加(Add) | CFArray 以外の全て | CFDictionary と CFSet の場合は、値がない場合は値を追加し、ある場合は何もしません。CFBag の場合、既にある場合も値を追加します。 |
置換 | すべて | 指定された値がある場合は、別の値に置き換えます。それ以外の場合は何もしません。 |
設定 | すべて | ない場合は値を追加し、ある場合は置き換えます。 |
削除 | すべて | ある場合は値を削除し、ない場合は何もしません。 |
固定サイズの可変コレクションでは、容量制限を超えて追加しないように注意しなければなりません。固定サイズのコレクションを使用すると、必要な数だけ値を追加できますが、容量を超えたときにも注意しません。ただし、これを行うと、望ましくない、定義されていない動作が発生する可能性が高くなります。
CFArray 型は、特別な 1 つの変更操作を特色としています。CFArraySortValues 関数を使用すると、配列に含まれる値をソートできます。値を比較するには、CFComparatorFunction 型に準拠しなければならないコンパレータ関数が使用されます。リスト 1 に、CFArraySortValues 関数の使用例を示します。
リスト 1 : 配列のソート
CFMutableArrayRef createSortedArray(CFArrayRef anArray) { CFIndex count = CFArrayGetCount(anArray); CFMutableArrayRef marray = CFArrayCreateMutableCopy(NULL, count, anArray); CFArraySortValues(marray, CFRangeMake(0, count), (CFComparatorFunction)CFStringCompare, NULL); return marray; }
CFStringCompare 関数は、この場合、CFString オブジェクトを比較するために使用されています。Core Foundation は、CFComparatorFunction 型の他のコンパレータ関数、特にCFDateCompare と CFNumberCompare を提供します。配列が Core Foundation オブジェクトを保持している場合、適切な既に定義されたコンパレータ関数を CFArraySortValues 関数に渡して、それらのオブジェクトをソートすることができます。
前の章 次の章