【问题标题】:Sort NSSet of custom objects by one attribute in Objective-C在Objective-C中按一个属性对自定义对象的NSSet进行排序
【发布时间】: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 似乎没有被识别。

【问题讨论】:

    标签: ios nsarray nsfetchrequest nsset


    【解决方案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 = 文章; } }
    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 2011-02-16
    相关资源
    最近更新 更多