有谁知道如何获取对象的 NSCountedSet 并按对象计数的顺序创建这些对象的数组?(从高到低)
问问题
3933 次
4 回答
9
NSCountedSet *countedSet = [[NSCountedSet alloc] initWithArray:array2];
NSMutableArray *dictArray = [NSMutableArray array];
[countedSet enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
[dictArray addObject:@{@"object": obj,
@"count": @([countedSet countForObject:obj])}];
}];
NSLog(@"Objects sorted by count: %@", [dictArray sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"count" ascending:NO]]]);
在上面的代码中,array2
是一个由 100 个随机字符串组成的数组,每个字符串都有两个字母。sortedArrayUsingDescriptors:
, 返回一个排序数组,在这种情况下,它按对象的计数降序排序。
于 2013-10-27T01:19:05.050 回答
8
这是实现相同结果的另一种方法:
NSArray *sortedValues = [countedSet.allObjects sortedArrayUsingComparator:^(id obj1, id obj2) {
NSUInteger n = [countedSet countForObject:obj1];
NSUInteger m = [countedSet countForObject:obj2];
return (n <= m)? (n < m)? NSOrderedAscending : NSOrderedSame : NSOrderedDescending;
}];
要按降序获取值,您可以使用(或反转上述返回值)。
sortedValues.reverseObjectEnumerator.allObjects
于 2013-10-27T22:20:03.020 回答
5
对于 Swift3,您需要稍微修改提供的 swift 代码:
let countedSet = [1,2,2,4,6,7,8,8,5,8,1]
let sorted = countedSet.allObjects.sorted { return countedSet.count(for: $0.0) > countedSet.count(for: $0.1) }
// iterate over all items in the set
for item in countedSet {
print("\(item): Count - \(countedSet.count(for: item))")
}
于 2016-11-04T22:22:11.937 回答
3
这是一个斯威夫特版本:
let sorted = countedSet.allObjects.sort { return countedSet.countForObject($0.0) < countedSet.countForObject($0.1) }
只需将降序更改<
为>
于 2015-12-08T11:30:47.407 回答