1

我有一个数组(示例中的 bigArray),其中包含多个包含字符串的数组。我需要向 bigArray 添加另一个数组(例如 arrayA),但我想检查这样的数组是否已经存在。如果它存在,我不想添加它。小数组的顺序(例如示例中的 arrayX)不会将它们彼此区分开来,所以如果我已经有一个数组,例如 arrayA,包含相同的数组但顺序不同,(arrayZ,arrayY,arrayX 而不是 arrayX ,arrayY,arrayZ 但具有相同的字符串内容)该数组不会被添加到大数组中。

我怎样才能做到这一点?

例子:

数组示例:

-bigArray

--arrayA

----arrayX -> 16,4,5,6,64

----arrayY -> 1,3,6,72,14

----arrayZ -> 13,73,50,34

--arrayB

----arrayX -> 1,4,5,6,4,2

----arrayY -> 1,4,6,12,14

----arrayZ -> 13,33,50,34

小数组的顺序不会区分它们:

--arrayc

----array -> 16,4,5,6,64

----array -> 1,3,6,72,14

is the same as:

--arrayd

----array -> 1,3,6,72,14

----array -> 16,4,5,6,64

因此 arrayD 不会被添加到大数组中。

4

4 回答 4

1

您可以尝试在示例中遍历要添加 ( ArrayB) 的数组对象,并尝试- (BOOL)containsObject:(id)anObject检查较小的数组 ( xy和 , z) 是否存在于Array A.

if(ArrayA.count!=ArrayB.count){
    //Don't check because the arrays will not be same, so add ArrayB
}else{
    int i=0,counter=0;
    for(i=0;i<ArrayB.count;i++){
        if(![ArrayA contains [ArrayB objectAtIndex:i]]){
            counter = 1;
        }
    }

    if(counter==1){
       //Add ArrayB because elements are not same.
    }else{
       //Don't add ArrayB because elements are same.
    }
}

试试这样的代码。

于 2013-06-26T08:02:42.947 回答
1

如果您使用NSSet而不是NSArray免费获得唯一的。结果是一组(可变)(不可变)数组集。

    NSSet *setA = [NSSet setWithArray:@[   // arrayA
        @[@16,@4,@5,@6,@64],               // arrayX
        @[@1,@3,@6,@72,@14],               // arrayY
        @[@13,@73,@50,@34],                // arrayZ
    ]];

    NSSet *setB = [NSSet setWithArray:@[   // arrayB
        @[@1,@4,@5,@6,@4,@2],              // arrayX
        @[@1,@4,@6,@12,@14],               // arrayY
        @[@13,@33,@50,@34],                // arrayZ
    ]];

    NSMutableArray *bigSet = [NSMutableSet setWithArray:@[setA, setB]];

    NSLog(@"%lu", [bigSet count]);

正如预期的那样,这将打印“2”。

    NSSet *setC = [NSSet setWithArray:@[   // arrayC
        @[@1,@4,@6,@12,@14],               // arrayY
        @[@1,@4,@5,@6,@4,@2],              // arrayX
        @[@13,@33,@50,@34],                // arrayZ
    ]];

    [bigSet addObject:setC];

    NSLog(@"%lu", [bigSet count]);

仍然打印“2”,因为setCsetB相等。

于 2013-06-26T08:23:47.767 回答
0

我不确定为什么要这样做,也不确定我是否完全遵循,但是您可以在逐项比较进行任何条目之前对每个次要数组进行排序。那么顺序就无所谓了。

于 2013-06-26T07:51:24.237 回答
0

也许您可以将键和值连接为新字符串并将它们进行比较。

此致。

/丹尼尔·卡尔森

于 2013-06-26T07:52:02.087 回答