Skip to content

KVC: Set And Array Operators 概要

2010.07.25

KVC (Key-Value Coding) の Set And Array Operators をマスターすると、コードを簡素化できたり、NSPredicate でできることの幅が増えたり、Cocoa Bindings でできることの幅が増えるなどの利点があります。今回から数回に渡って、Set And Array Operators を取り上げます。

初回である今回は、Set And Array Operators の概要を説明します。


Set And Array Operators は、valueForKeyPath: に渡すキーパスに、ちょっとした演算を組み込むための演算子です。

以下の11こが用意されています:
@avg
@count
@distinctUnionOfArrays
@distinctUnionOfObjects
@distinctUnionOfSets
@max
@min
@sum
@unionOfArrays
@unionOfObjects
@unionOfSets

これらは NSSet と NSArray に適用できる演算子なので、”Set And Array” という枕詞がついて、”Set And Array Operators” という名前がついています。

例えば、次のような NSDictionary 型変数 company があるとします。

company = {
    employees = (
        {
            age = 20;
            name = A;
        },
        {
            age = 23;
            name = B;
        },
        {
            age = 20;
            name = C;
        }
    );
}

Set And Array Operators のひとつ @avg オペレータは、平均値を演算するためのオペレータですが、これを用いると age の平均値を次のようにして取得することができます。

NSNumber *averageOfAge;
averageOfAge = [company valueForKeyPath:@"employees.@avg.age"];

上の例では、company 辞書から employees 配列を取得し、そこから @avg オペレータを使用して age の平均値を取得しています。結果は、(20 + 23 + 20) / 3 で 21 となります。

Set And Array Operators を使用するときのフォーマット

[obj valueForKeyPath:
    @"keyPathToArrayOrSet.@operator.keyPathToProperty"];

age の平均値は、以下のようにしても取得することができます。

NSArray *employees;
NSNumber *averageOfAge;
employees = [company valueForKey:@"employees"];
averageOfAge = [employees valueForKeyPath:@"@avg.age"];

上の例では、@avg オペレータの適用されるものが既に employees 配列なので、@avg オペレータの前が空になっています。

また、age の平均値は、以下のようにしても取得することができます。

NSArray *ages;
NSNumber *averageOfAge;
ages = [company valueForKeyPath:@"employees.age"];
averageOfAge = [ages valueForKeyPath:@"@avg.self"];

上の例では、@avg オペレータの適用されるものが age の配列そのものなので、@avg オペレータの後が “self” になっています。

Set And Array Operators は、NSSet にも適用できます。

NSSet *employees;
NSNumber *averageOfAge;
employees = [NSSet setWithArray:[company valueForKey:@"employees"]];
averageOfAge = [employees valueForKeyPath:@"@avg.age"];

Set And Array Operators の概要は以上です。次回から、Set And Array Operator ひとつひとつを見ていきます。

Advertisements

From → Develop

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s