我有一套对象,让我们说Fruit:
let uniqueFruits = Set(Fruit("Apple"), Fruit("Banana"), Fruit("Orange"))
并希望根据某个atteribute对它们进行排序。在这种情况下" size"。
根据Apple的文档,我无法找到这样做的方法: https://developer.apple.com/reference/foundation/nsmutableset
如何按特定属性对Set进行排序?
答案 0 :(得分:2)
您必须将Set转换为数组。
原因如下:
“集合在顺序无关紧要的意义上是不同的 将用于订单无关紧要的情况。“
而一组:
“...在集合中存储相同类型的不同值,但没有 定义了排序。“
在这种情况下,你将有一个不同值的列表(我认为你决定使用NSSet作为有效参数)你必须将你的集转换为数组,你不应该遇到麻烦,因为你的集已经似乎要注意你的对象属于同一类型(例如“Fruit”)。
所以在这种情况下,我们会有
我已经为Objective-C和Swift附加了一个示例,以防您需要这样或那样:
Objective-C代码
NSMutableSet<Fruit> *uniqueFruits = [NSMutableSet new];
[uniqueFruits addObject:[[Fruit alloc] initWithName:@"Apple"]];
[uniqueFruits addObject:[[Fruit alloc] initWithName:@"Banana"]];
[uniqueFruits addObject:[[Fruit alloc] initWithName:@"Orange"]];
// 1 Define Sort Criteria
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"size" ascending:YES]; // Key is the NSString of a certain selector. If it is an attribute of another class reference. Simply use "reference.property".
// 2 Sort the Array
NSArray<Fruit> *sortedArray = [self.uniqueFruits sortedArrayUsingDescriptors:@[descriptor]];
Swift 3 Code
let uniqueFruits = Set<Fruit>(Fruit("Apple"), Fruit("Banana"), Fruit("Orange"))
// 1 & 2 Define Sort Criteria and sort the array, using a trailing closure that sorts on a field/particular property you specify
// Be aware: result is an array
let sortedArray = uniqueFruits.sort({ $0.size < $1.size })
答案 1 :(得分:-1)
有NSOrderedSet及其可变的同级兄弟NSMutableOrderedSet,它们的确切含义是:保持顺序的集合。可变命令也有各种方法对集合进行排序。在Swift中,使用起来有点尴尬,因为您无法创建NSMutableOrderedSet<Fruit>
,并且无论如何只能将其用于对象。