【问题标题】:Get unique NSArray of objects based on key根据键获取对象的唯一 NSArray
【发布时间】:2014-05-08 19:17:18
【问题描述】:

我有一个 NSArray 的自定义对象,并希望过滤该数组以在特定键上是唯一的。我在搜索答案时看到的大部分内容都涉及使用valueForKey:valueForKeyPath:@distinctUnionOfObjects,但这些会返回该键的值数组。我想要整个对象。

这些对象是 Parse 的子类 PFObjects,因此它们符合 KVC,我希望它们在 objectId 键上被过滤。

【问题讨论】:

  • 如果您在问题中提供更多关于数组中的对象是什么以及应该对什么值进行过滤的问题会有所帮助。
  • 我添加了更多信息,但这是一个非常笼统的问题,可以应用于任何 KVO 对象的任何键。
  • 它根本不是通用的。您的需求非常具体。如果两个具有许多不同值的不同对象碰巧具有相同的“键”,结果应该是什么?你想要哪个对象?
  • 不幸的是,没有任何内置功能可以做到这一点。

标签: ios objective-c cocoa-touch nsarray key-value-coding


【解决方案1】:

把它放在 NSArray 上的一个类别中:

-(NSArray*)arrayFilteredForUniqueValuesOfKeyPath:(NSString*)keyPath
{
    NSMutableSet*   valueSeen = [NSMutableSet new];

    return [self filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
        id value = [evaluatedObject valueForKeyPath:keyPath];

        if(![valueSeen containsObject:value])
        {
            [valueSeen addObject:value];
            return true;
        }
        else
        {
            return false;
        }
    }]];
}

当然,这个概念是有缺陷的,因为你真的无法确定 n 个对象中的哪一个对你真正想要的 keyPath 有任何给定值(在这种情况下你得到第一个)

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2023-03-12
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多