有誰知道如何獲取NSCountedSet對象並按照它們的對象數量順序創建這些對象的數組? (最高計數到最低)NSCountedSet按次數排序
7
A
回答
7
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:
,返回一個排序數組,在這種情況下,它按照對象的數量降序排列。
7
這裏是另一種方式來達到同樣的效果:
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
1
這裏是一個斯威夫特版本:
let sorted = countedSet.allObjects.sort { return countedSet.countForObject($0.0) < countedSet.countForObject($0.1) }
只要改變<
到>
降序排序
2
對於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))")
}
+1
'bag'參考是怎麼回事?你能澄清嗎? – Adrian
+0
對不起,我用其他變量名稱測試了代碼,並將該變量重命名爲錯誤;-)它修改了代碼。謝謝! – Lepidopteron
相關問題
- 1. 計數和排序按次數
- 2. 按Javascript數組中排序的次數(count)排序
- 3. Seaborn.countplot:按次數排序類別?
- 4. 按表中的出現次數排序
- 5. 比較TreeBag按發生次數排序
- 6. LINQ按出現次數排序
- 7. mongodb:字段按發生次數排序
- 8. 條件查詢:按次數排序
- 9. 按出現次數排序外鍵(SQL)
- 10. JPQL查詢 - 按次數排序
- 11. Laravel查詢 - 按次數排序
- 12. Symfony原則庫按次數排序
- 13. 按層次結構排序?
- 14. 按次序排列結果
- 15. 按文件列按批次排序
- 16. 我如何按重複次數排序,然後在MySQL中按日期排序?
- 17. 按發生次序排序IEnumerable
- 18. 按組排序/排序按
- 19. NSCountedSet枚舉Swift
- 20. 按參數排序
- 21. 按奇數排序
- 22. 按參數排序
- 23. 按數值在次數組中排序數組php
- 24. 基數按降序排序
- 25. 如何按上次回覆排序?
- 26. 按層次結構算法排序
- 27. 按層次結構排序列表
- 28. Prometheus Grafana模板按次序排列
- 29. 如何按層次結構排序
- 30. 按出現次序排列對象
如果你改變'return(n <= m)? (n
Filowk
這是一個很好的答案,但我更喜歡對每個countForObject值使用'NSNumber'實例,然後僅返回這些的「compare」結果。 –