アルファベットで配列をソートする方法はわかっていますが、NSMutableArrayをその中のオブジェクトの人気度で並べ替える必要があります。次のオブジェクトと配列を想像してみて:人気度に基づいてNS(可変)配列をソート
- B
- C
- B
- B
私は人気順これらのオブジェクトをソートしたいと次のような配列を作成してください:
- B
- B
- B
- C
はこれを行うには良いと簡単な方法はありますか?多分NSSortDescriptorの鍵ですか? (それを見つけることができませんでした)
おかげ
アルファベットで配列をソートする方法はわかっていますが、NSMutableArrayをその中のオブジェクトの人気度で並べ替える必要があります。次のオブジェクトと配列を想像してみて:人気度に基づいてNS(可変)配列をソート
私は人気順これらのオブジェクトをソートしたいと次のような配列を作成してください:
はこれを行うには良いと簡単な方法はありますか?多分NSSortDescriptorの鍵ですか? (それを見つけることができませんでした)
おかげ
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"theSortKey"
ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors];
もこれはあなたのために働く必要があります
このスレッドを参照してください。
NSArray *array = [[NSArray alloc] initWithObjects:@"A", @"A", @"B", @"B", @"B", @"C", nil];
NSMutableDictionary *occurenceOfValues = [[NSMutableDictionary alloc] init];
for (id value in array) {
NSNumber *count = [occurenceOfValues objectForKey:value];
[occurenceOfValues setValue:[NSNumber numberWithInt:[count intValue] + 1] forKey:value];
}
NSArray *valuesInOrder = [[[occurenceOfValues keysSortedByValueUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];
NSMutableArray *sortedArray = [[NSMutableArray alloc] initWithCapacity:array.count];
for (id value in valuesInOrder) {
NSNumber *count = [occurenceOfValues objectForKey:value];
for (int i = 0; i < [count intValue]; i++) {
[sortedArray addObject:value];
}
}
NSLog(@"%@", sortedArray);
コンソール出力:
2012-05-08 09:20:15.805 SortArrayPopularity [25206:F803( B、 B、 B、 A、 A、C )
私は、B、Cは... 0
への鍵と設定されたデフォルト値として、次に列挙する目を持っている辞書を使用します対応するキーの数を増やしてください。
最後に[dict allKeys]によって返されたキー配列をソートします。
簡潔にするために、私は短いことに、配列リテラルの新しい構文を使用しました。 theSortKeyは、すべてのオブジェクトであると文字 'A'、 'B' を含ま
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *ar = @[@"B", @"A", @"C", @"B", @"B", @"A"];
NSCountedSet *countedSet = [NSCountedSet setWithArray:ar];
NSArray *sorted = [ar sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSInteger diff = [countedSet countForObject:obj1] - [countedSet countForObject:obj2];
if (diff < 0)
return NSOrderedDescending;
else if (diff > 0)
return NSOrderedAscending;
else
return NSOrderedSame;
}];
NSLog(@"%@", ar);
NSLog(@"%@", sorted);
}
return 0;
}
出力
2012-05-08 07:25:18.465 Sort[20434:303] (
B,
A,
C,
B,
B,
A
)
2012-05-08 07:25:18.468 Sort[20434:303] (
B,
B,
B,
A,
A,
C
)
.... – Saad