【问题标题】:How to check if a NSArray has the values of another array如何检查 NSArray 是否具有另一个数组的值
【发布时间】:2013-08-06 06:53:13
【问题描述】:

我有我的数组unique,这是我的主数组和我的数组kind。我需要检查 kind 的 1 个值是否存在于数组 unique 中。那么如果unique 中有多个数组kind 的值,我需要取消设置除数组中使用的第一个值之外的所有值。

我得到的进一步实现是使用以下代码,但我无法存储找到的对象的indexpath 以进行以后的比较。 xcode 说"bad receiver type nsinteger"

谁能帮我实现这个目标?

kind = @[@"#Routine",@"#Exercise",@"#Username"];
    NSMutableArray *uniqueKind = [NSMutableArray array];
    for (NSString* obj in kind) {
        if ( [unique containsObject:obj] ) {
            NSInteger i = [unique indexOfObject:obj];
            [uniqueKind addObject: [i intValue]];
        }
    }

【问题讨论】:

  • 您的代码似乎没有按照您的描述执行。如果unique 中存在所有三个字符串,则您将把所有三个字符串的索引都添加到uniqueKind。你的意思是你不想unique中的each字符串不止一个?

标签: ios objective-c cocoa-touch


【解决方案1】:

NSInteger 类似于int,因此您无法向其发送消息 ([i intValue])。此外,您不能将NSInteger 添加到数组而不使其成为NSNumber 或其他一些对象类型。你可以这样做:

NSInteger i = [unique indexOfObject:obj];
[uniqueKind addObject: [NSNumber numberWithInteger:i]];

另外(不了解您在做什么)您可能希望使用 NSSet 而不是数组。你可以结合几个调用:

NSUInteger i = [unique indexOfObject:obj];
if ( i != NSNotFound ) {
    [uniqueKind addObject:[NSNumber numberWithInteger:i]];
}

【讨论】:

  • @JoshCaswell 复制粘贴错误。谢谢你抓住它。我在演示你不需要调用containsObject:,因为indexOfObject: 会告诉你它是否在数组中。
【解决方案2】:

我不确定它是否能解决您的问题,但您是否考虑过使用集合(或可变变体)而不是数组?它们确保唯一性,并允许您检查交叉点/包含。请参阅NSSet class reference

【讨论】:

    【解决方案3】:

    您必须将对象添加到 NSMutableArray,而不是实际的 intValue。尝试先将整数转换为 NSNumber。

    [uniqueKind addObject: [NSNumber numberWithInt:i]];

    改为。

    (已编辑)

    【讨论】:

    • 糟糕 - 我的错 - 尝试使用 numberWithInt: i 将其转换为 NSNumber
    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多