NSNumberを要素に持つNSArrayを使う際のメモ。
NSNumberを要素に持つNSArrayを使う際のメモ。
最頻出要素はNSCountedSetを利用。
参考:
最頻出要素の取得(stackoverflow)
キー値コーディングプログラミングガイド
// NSNumber配列を初期化 NSArray *numbers = @[@9,@4,@5,@1,@1,@17,@9,@6,@9]; // 昇順ソート NSArray *asecNumbers = [numbers sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"asecNumbers = %@",asecNumbers); // 降順ソート NSSortDescriptor *descDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO]; NSArray *descNumbers = [numbers sortedArrayUsingDescriptors:@[descDescriptor]]; NSLog(@"descNumbers = %@",descNumbers); // 最大、最小、平均、合計値の取得 NSLog(@"max of numbers = %@",[numbers valueForKeyPath:@"@max.self"]); NSLog(@"min of numbers = %@",[numbers valueForKeyPath:@"@min.self"]); NSLog(@"avg of numbers = %@",[numbers valueForKeyPath:@"@avg.self"]); NSLog(@"sum of numbers = %@",[numbers valueForKeyPath:@"@sum.self"]); // 重複データを取り除く NSArray *distinctNumbers = [numbers valueForKeyPath:@"@distinctUnionOfObjects.self"]; NSLog(@"distinctNumbers = %@",distinctNumbers); // 6以上のデータを取得 NSPredicate *over6Pred = [NSPredicate predicateWithFormat:@"SELF >= 6"]; NSArray *over6Array = [numbers filteredArrayUsingPredicate:over6Pred]; NSLog(@"over6Array = %@",over6Array); // 最頻出のデータを取得 NSCountedSet *set = [NSCountedSet setWithArray:numbers]; int highest = 0; NSNumber *mostFqtNumber = @0; for (NSNumber *n in set) { if ([set countForObject:n] > highest) { highest = [set countForObject:n]; mostFqtNumber = n; } } NSLog(@"most frequent number = %@",mostFqtNumber);