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

时间:2013-06-26 07:44:31

标签: ios objective-c arrays

我有一个数组(来自示例的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 个答案:

答案 0 :(得分:1)

您可以尝试在示例中迭代要添加的数组的对象(ArrayB),然后尝试- (BOOL)containsObject:(id)anObject检查较小的数组(x,{ {1}}中有{1}}和y}。

z

尝试类似这样的代码。

答案 1 :(得分: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相等。

答案 2 :(得分:0)

我不确定为什么要这样做,我不确定我是否完全遵循,但您可以在通过条目比较进行任何输入之前对每个次要数组进行排序。然后订单无关紧要。

答案 3 :(得分:0)

也许你可以将key和value作为新字符串连接并将它们进行比较。

最好的问候。

/ Daniel Carlsson