Ios 将一个数组中的数组与另一个字符串数组进行比较
我有一个数组(示例中的bigArray)包含包含字符串的乘法数组。我需要向bigArray添加另一个数组(如arrayA),但我想检查这样的数组是否已经存在。如果它存在,我不想添加它。小数组的顺序(例如示例中的arrayX)不能将它们彼此区分开来,因此如果我已经有一个数组,例如arrayA,它包含相同的数组,但顺序不同(arrayZ,arrayY,arrayX而不是arrayX,arrayY,arrayZ,但具有相同的字符串内容),则该数组不会添加到大数组中 我怎样才能做到这一点 示例: 阵列示例:Ios 将一个数组中的数组与另一个字符串数组进行比较,ios,objective-c,arrays,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添加到大数组中。我不确定为什么要这样做,也不确定我是否完全遵循了这一点,但您可以在进行逐项比较之前对每个小数组进行排序。那么顺序就无关紧要了。也许您可以将键和值合并为一个新字符串,并将它们进行比较 致以最良好的祝愿
/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)到集合。非常好的信息。谢谢。这是一个非常好的答案,但它不包括两个相同的数组,但其中的数组顺序不同的情况。