在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:通用的排序工具类,能够对自定义对象,针对不同的属性(字段),实现排序(正序倒序)

对自定义属性执行客户端验证

在 Objective-C 中按评论数量对核心数据中的 FetchedObjects 数组进行排序

在 C++ 中对自定义对象的向量进行操作 [关闭]

在 Objective-C 中获取对象属性列表