我有一个值数组,我想在其中计算每个唯一值的发生率,然后创建一个按发生率排序的新的唯一值数组。
例如,对于数组如下:
vals = {0,0,0,2,0,1,2}
我想以{0,2,1}
数组结束,因为0是最常见的值,2是第二最常见的值,而1是最不常见的值。注意,这些是数字是无关紧要的。它们可以很容易地成为字符串。
我以为我也许可以使用nssortdescriptor,如:
NSSortDescriptor *sorter = [NSSortDescriptor sortDescriptorWithKey:@"wordCount" ascending:NO];
NSArray *sortedcats = [vals sortedArrayUsingDescriptors:@[sorter]];
但是,这不是按发生率对它们进行排序,也不会筛选出重复项。
谢谢您的建议。
有几种方法
转换为Set/NSSet
,然后排序。
快速
let vals = [0,0,0,2,0,1,2]
let uniqued = Set(vals).sorted()
[Object C中的NSSet
+ NSSortDescriptor
也可以使用相同的方法,但是显然要写更长的一行。
或更经典的基础方法
let nsvals: NSArray = [3,0,0,2,0,1,2]
let nsuniquedAndSorted = nsvals.value(forKeyPath: "@distinctUnionOfObjects.self")
@distinctUnionOfObjects
也是免费的,这很可爱。在同一方面here有很多聪明的宠物把戏。