鍵值編碼(KVC)集合操做(Collection Operators)提供了一種很是簡潔的運算方法,能夠有效避免使用循環,如for,while或快速枚舉。 數組
這些方法包括三種類型,簡單集合運算符、對象操做符、數組和集合操做符。Apple不容許自定義集合操做符,但實際上利用swizzle黑魔法,能夠作到自定義操做符。有興趣能夠參考http://kickingbear.com/blog/archives/9 編碼
@count : 返回一個值爲集合中對象總數的NSNumber對象。
@sum : 首先把集合中的每一個對象都轉換爲double類型,而後計算其總,最後返回一個值爲這個總和的NSNumber對象。
@avg: Takes the double value of each object in the collection, and returns the average value as an NSNumber.
@max : 使用compare:方法來肯定最大值。因此爲了讓其正常工做,集合中全部的對象都必須支持和另外一個對象的比較。
@min : 和@max同樣,可是返回的是集合中的最小值。 spa
假設一個Product類,以下所示 .net
@interface Product : NSObject @property NSString *name; @property double price; @property NSDate *launchedOn; @end
數據以下圖所示,組成一個products數組,這裏省略了初始化一個Product對象,並添加至products數組的代碼,請自行腦補。 code
那麼使用kvc鍵值路徑的運算符操做,能夠獲得數組個數、價格總和、均價和最先發布日期 對象
[products valueForKeyPath:@"@count"]; // 4 [products valueForKeyPath:@"@sum.price"]; // 3526.00 [products valueForKeyPath:@"@avg.price"]; // 881.50 [products valueForKeyPath:@"@max.price"]; // 1699.00 [products valueForKeyPath:@"@min.launchedOn"]; // June 11, 2012
2. 對象操做符,返回一個數組 blog
@unionOfObjects/@distinctUnionOfObjects: 返回一個由操做符右邊的key path所指定的對象屬性組成的數組。其中@distinctUnionOfObjects 會對數組去重, 並且 @unionOfObjects 不會。 get
有如下數組,每一個數組成員都是一個Product類對象。 string
NSArray *inventory = @[iPhone5, iPhone5, iPhone5, iPadMini, macBookPro, macBookPro];那麼,
[inventory valueForKeyPath:@"@unionOfObjects.name"]; // "iPhone 5", "iPhone 5", "iPhone 5", "iPad Mini", "MacBook Pro", "MacBook Pro" [inventory valueForKeyPath:@"@distinctUnionOfObjects.name"]; // "iPhone 5", "iPad Mini", "MacBook Pro"
3. 數組和集合運算符,返回一個數組或者集合 io
@distinctUnionOfArrays/@unionOfArrays: 返回了一個數組,其中包含這個集合中每一個數組對於這個操做符右面指定的key path進行操做以後的值。正如你指望的,distinct版本會移除重複的值。
@distinctUnionOfSets: 和@distinctUnionOfArrays差很少, 可是它指望的是一個包含着NSSet對象的NSSet,而且會返回一個NSSet對象。由於集合不能包含重複的值,因此它只有distinct操做。
與對象操做符相似,你們能夠本身嘗試。