ios 開發(fā)集合操作避免使用循環(huán)

鍵值編碼(KVC)集合操作(Collection Operators)提供了一種非常簡潔的運算方法,可以有效避免使用循環(huán),如for,while或快速枚舉。
這些方法包括三種類型,簡單集合運算符、對象操作符、數(shù)組和集合操作符

集合操作文章地址
http://kickingbear.com/blog/archives/9

1.簡單集合運算符,返回strings,number或dates

@count : 返回一個值為集合中對象總數(shù)的NSNumber對象。
@sum : 首先把集合中的每個對象都轉(zhuǎn)換為double類型,然后計算其總,最后返回一個值為這個總和的NSNumber對象。
@avg: 計算平均值,最后返回一個值為這個總和的NSNumber對象。
@max : 使用compare:方法來確定最大值。所以為了讓其正常工作,集合中所有的對象都必須支持和另一個對象的比較。
@min : 和@max一樣,但是返回的是集合中的最小值。

@interface Product : NSObject
@property NSString *name;
@property double price;
@end



Product *model1 = [[Product alloc] init];
model1.name = @"iPhone 6";
model1.price = 6000;

Product *model2 = [[Product alloc] init];
model2.name = @"iPhone 7";
model2.price = 7000;

Product *model3 = [[Product alloc] init];
model3.name = @"iPhone 8";
model3.price = 8000;

Product *model4 = [[Product alloc] init];
model4.name = @"iPhone x";
model4.price = 10000;

NSArray *array = @[model1, model2, model3, model4]; 

使用集合操作得到數(shù)組個數(shù)、價格總和、均價、最大價格。

[products valueForKeyPath:@"@count"]; 
[products valueForKeyPath:@"@sum.price"]; 
[products valueForKeyPath:@"@avg.price"]; 
[products valueForKeyPath:@"@max.price"]; 

2.對象操作符,返回一個數(shù)組

@unionOfObjects/@distinctUnionOfObjects: 返回一個由操作符右邊的key path所指定的對象屬性組成的數(shù)組。其中@distinctUnionOfObjects 會對數(shù)組去重, 而且 @unionOfObjects 不會。
有以下數(shù)組,每個數(shù)組成員都是一個Product類對象。

Product *model1 = [[Product alloc] init];
model1.name = @"iPhone 6";
model1.price = 6000;

Product *model2 = [[Product alloc] init];
model2.name = @"iPhone 6";
model2.price = 6000;

Product *model3 = [[Product alloc] init];
model3.name = @"iPhone 8";
model3.price = 8000;

Product *model4 = [[Product alloc] init];
model4.name = @"iPhone x";
model4.price = 10000;

NSArray *array = @[model1, model2, model3, model4];


[array valueForKeyPath:@"@unionOfObjects.name"]; //"iPhone 6", "iPhone 6", "iPhone 8", "iPhone x"
[array valueForKeyPath:@"@distinctUnionOfObjects.name"]; // "iPhone 6", "iPhone 8", "iPhone x"

3.數(shù)組和集合運算符,返回一個數(shù)組或者集合

@distinctUnionOfArrays/@unionOfArrays: 返回了一個數(shù)組,其中包含這個集合中每個數(shù)組對于這個操作符右面指定的key path進行操作之后的值,distinct版本會移除重復的值。

@distinctUnionOfSets: 和@distinctUnionOfArrays差不多, 但是它期望的是一個包含著NSSet對象的NSSet,并且會返回一個NSSet對象。因為集合不能包含重復的值,所以它只有distinct操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容