将NSArray转换为在Objective-C或Swift中按频率排序的唯一值数组

问题描述 投票:0回答:1

我有一个值数组,我想在其中计算每个唯一值的发生率,然后创建一个按发生率排序的新的唯一值数组。

例如,对于数组如下:

 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]];

但是,这不是按发生率对它们进行排序,也不会筛选出重复项。

谢谢您的建议。

ios arrays comparator nssortdescriptor
1个回答
0
投票

有几种方法

转换为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有很多聪明的宠物把戏。

© www.soinside.com 2019 - 2024. All rights reserved.