在Objective-C中按一个属性对自定义对象的NSSet进行排序
Posted
技术标签:
【中文标题】在Objective-C中按一个属性对自定义对象的NSSet进行排序【英文标题】:Sort NSSet of custom objects by one attribute in Objective-C 【发布时间】:2019-03-01 22:51:30 【问题描述】:我正在尝试按属性或属性的最常见值对数组进行排序。 This question 和其他人建议您可以使用 NSSet 有效地执行此操作。但是,它只是按最常见的字符串排序,而不是自定义对象中的属性值。我如何获得以下内容以返回最受欢迎的标题?
NSArray<Articles*> *results = [self.managedObjectContext executeFetchRequest:fetchRequest
error:&error];
NSCountedSet* mySet = [[NSCountedSet alloc] initWithArray:results];
Articles* mostRead = nil;
NSUInteger highestCount = 0;
for(Articles* article in results)
NSUInteger count = [mySet countForObject:article.title];
if(count > highestCount)
highestCount = count;
mostRead = article;
上面的代码没有返回值,因为 countForObject:article.title 似乎没有被识别。
【问题讨论】:
【参考方案1】:如果设置为 Articles *
,则为您的 mySet。然后你算上article. title
,即NSString *
。尝试更改 NSString *
集应该可以工作。
NSMutableArray<NSString *> *resultsStr = [NSMutableArray new];
[results enumerateObjectsUsingBlock:^(Articles * _Nonnull obj,
NSUInteger idx,
BOOL * _Nonnull stop)
[resultsStr addObject:obj.title];
];
NSCountedSet* mySet = [[NSCountedSet alloc] initWithArray:resultsStr];
【讨论】:
我还用吗:文章* mostRead = nil; NSUInteger 最高计数 = 0; for(Articles* article in results) NSUInteger count = [mySet countForObject:article.title];如果(计数>最高计数)最高计数=计数; mostRead = 文章;以上是关于在Objective-C中按一个属性对自定义对象的NSSet进行排序的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift/Objective-c 中按媒体类型自定义图像选择器
Java:通用的排序工具类,能够对自定义对象,针对不同的属性(字段),实现排序(正序倒序)