Rav*_*avi 15 equals objective-c nsmutablearray nsarray ios
我有2个Nsarray,其中2个数组的对象相同可能是对象的索引不同,但它应该打印两个是相等的,不管有哪些索引
NSArray *arr1 = [[NSArray alloc]initWithObjects:@"aa", @"bb", @"1", @"cc", nil];
NSArray *arr2 = [[NSArray alloc]initWithObjects:@"bb", @"cc", @"1", @"aa", nil];
if ([arr1 isEqualToArray:arr2])
{
NSLog(@"Equal");
}
else
{
NSLog(@"Not equal");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印'不相等', 但它应打印'等于'.我怎样才能做到这一点?
rma*_*ddy 35
这两个数组不相等.两个数组相同,它们都以相同的顺序具有相同的对象.
如果要进行比较而不考虑订单,则需要使用两个NSSet
对象.
NSSet *set1 = [NSSet setWithArray:arr1];
NSSet *set2 = [NSSet setWithArray:arr2];
if ([set1 isEqualToSet:set2]) {
// equal
}
Run Code Online (Sandbox Code Playgroud)
OC *_*ard 15
这里的大多数答案实际上并不适用于相当常见的情况(请参阅他们的评论).有一个非常好的数据结构可以解决这个问题:NSCountedSet.
计数的集合是无序的,但确实关心存在的项目数量,因此您不会最终得到@[1, @1, @2] == @[@1, @2, @2]
.
NSArray *array1 = @[@1, @1, @2];
NSArray *array2 = @[@1, @2, @2];
NSCountedSet *set1 = [[NSCountedSet alloc] initWithArray:array1];
NSCountedSet *set2 = [[NSCountedSet alloc] initWithArray:array2];
BOOL isEqual = [set1 isEqualToSet:set2];
NSLog(@"isEqual:%d", isEqual);
Run Code Online (Sandbox Code Playgroud)
试试这个.我正在做的是复制你的第一个数组并从第二个数组中删除复制元素.如果它为空则则相等,否则不相等.
这比@rmaddy解决方案具有更小的内存占用量.您只创建一个数组的副本,而不是两个数组...
NSMutableArray *copyArray;
if([arr1 count] >= [arr2 count])
{
copyArray = [NSMutableArray arrayWithArray:arr1];
[copyArray removeObjectsInArray:arr2];
}
else //c(arr2) > c(arr1)
{
copyArray = [NSMutableArray arrayWithArray:arr2];
[copyArray removeObjectsInArray:arr1];
}
if([copyArray count] != 0)
NSLog('Not Equal');
else
NSLog('Equal');
Run Code Online (Sandbox Code Playgroud)
UPDATE1:如果你想arr2
在此之后使用,那么它就被改变了.你需要复制它,然后在那种情况下,记忆方式与rmaddy解决方案相同.但是这个解决方案仍然是优越的,因为NSSet
创造时间远远超过NSArray
- 来源.
UPDATE2:更新以使答案更全面,因为一个阵列比其他阵列大.
正如rmaddy所说,那些NSArray并不相同.试试这个:
-(BOOL)compareArrayIgnoreIndexes:(NSArray*)arrayOne toArray:(NSArray*)arrayTwo{
NSSet *setOne=[[NSSet alloc]initWithArray:arrayOne];
NSSet *setTwo=[[NSSet alloc]initWithArray:arrayTwo];
return [setOne isEqualToSet:setTwo];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20640 次 |
最近记录: |