こんなデータ構造があった時
NSArray *animals=@[ @{@"name" : @"Dog", @"numberOfLegs" : @4, @"breeds" : @[ @{@"name" : @"Lab", @"price" : @299.99}, @{@"name" : @"Collie", @"price" : @199.99}, @{@"name" : @"Shepard", @"price" : @299.99} ] }, @{@"name" : @"Cat", @"numberOfLegs" : @4, @"breeds" : @[ @{@"name" : @"Siamese", @"price" : @99.99}, @{@"name" : @"Persian", @"price" : @89.99}, @{@"name" : @"Himalayan", @"price" : @79.99} ] }, @{@"name" : @"Spider", @"numberOfLegs" : @8, @"breeds" : @[ :
numberOfLegsの平均値は1行で求められる。
id avgNumberOfLegs = [animals valueForKeyPath:@"@avg.numberOfLegs"];オペレータは @min, @max, @avg, @count, @sum などの集計系の他、@unionOfObjects などの集合系がある。
NSArray* names = [animals valueForKeyPath:@"@unionOfObjects.name"];なら
( Dog, Cat, Spider, Fish, Goose )となる。特定要素の列挙したい場面は多々あるのでこれは便利。
関連情報)