Ios 将一个数组中的数组与另一个字符串数组进行比较

Ios 将一个数组中的数组与另一个字符串数组进行比较,ios,objective-c,arrays,Ios,Objective C,Arrays,我有一个数组(示例中的bigArray)包含包含字符串的乘法数组。我需要向bigArray添加另一个数组(如arrayA),但我想检查这样的数组是否已经存在。如果它存在,我不想添加它。小数组的顺序(例如示例中的arrayX)不能将它们彼此区分开来,因此如果我已经有一个数组,例如arrayA,它包含相同的数组,但顺序不同(arrayZ,arrayY,arrayX而不是arrayX,arrayY,arrayZ,但具有相同的字符串内容),则该数组不会添加到大数组中 我怎样才能做到这一点 示例: 阵列示

我有一个数组(示例中的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添加到大数组中。

我不确定为什么要这样做,也不确定我是否完全遵循了这一点,但您可以在进行逐项比较之前对每个小数组进行排序。那么顺序就无关紧要了。

也许您可以将键和值合并为一个新字符串,并将它们进行比较

致以最良好的祝愿


/Daniel Carlsson

在您的示例中,您可以尝试迭代要添加的数组对象(
ArrayB
),并尝试
-(BOOL)containsObject:(id)一个对象
,以检查
数组A
中是否存在较小的数组(
x
y
z

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.
    }
}
if(ArrayA.count!=ArrayB.count){
//不要检查,因为数组将不相同,所以添加ArrayB
}否则{
int i=0,计数器=0;

对于(i=0;i如果使用
NSSet
而不是
NSArray
则可以免费获得uniquing。结果是一组(可变)数组

    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”,因为
setC
setB
是相等的。

这真的很有趣。如果我尝试添加
NSSet*setB=[NSSet setWithArray:@[/arrayC@[@4,@1,@5,@6,@4,@2],//arrayX@[@1,@4,@6,@12,@14],//arrayY[@13,@33,@50,@34],//arrayZ]];
到bigSet?(我已使用arrayB并在arrayX的前两个数字之间切换)@Sha在您的问题中,您指定了内部集合(或字符串?)保留并比较其元素的顺序。因此,如果更改顺序,则setB
将不会与
bigSet
中的另一个集合进行比较
bigSet
将包含另一个元素。如果要更改此行为,只需更改内部数组(x、y、z)到集合。非常好的信息。谢谢。这是一个非常好的答案,但它不包括两个相同的数组,但其中的数组顺序不同的情况。