NSLog(@"Ci sono %d categorie",category.count);
for(int c=0; c<category.count; c++){
CategoryArray * element =[category objectAtIndex:c];
NSLog(@"******************************");
NSLog(@"Titolo %@",element.label);
NSLog(@"Source %@",element.url);
NSLog(@"******************************");
[element release];
这是我的代码!我需要删除所有重复数组...我使用此代码,但我不明白为什么它不起作用。
uniquearray = [[NSSet setWithArray:category] allObjects];
答案 0 :(得分:5)
您的代码确实有效。试试这个:
NSArray *a = [NSArray arrayWithObjects:@"a", @"b", @"c", @"d", @"b", @"b", @"d", nil];
NSLog(@"a: %@\ndistinctA: %@", a, [[NSSet setWithArray:a] allObjects]);
输出结果为:
a: (
a,
b,
c,
d,
b,
b,
d
)
distinctA: (
c,
d,
a,
b
)
知道代码适用于包含重复对象的数组,您现在不得不想知道为什么您认为重复的对象不被认为是如此。关于hash和isEqual的现有答案指出了你正确的方向。
答案 1 :(得分:2)
设置不能包含任何重复记录。它使用散列来区分它们,如果散列相同则使用isEqual(参见Rudy Velthuis的评论)。
答案 2 :(得分:2)
CategoryArray 中的元素必须正确实现 NSSet <的 isEqual 和 hash / strong>能够找出哪些是重复的对象。
你可以在这里看到另一个关于覆盖isEqual和hash的问题:Best practices for overriding isEqual: and hash
答案 3 :(得分:1)
您可以使用以下代码。
NSMutableArray* filterResults = [[NSMutableArray alloc] init];
BOOL copy;
if (![category count] == 0) {
for (CategoryArray *a1 in category) {
copy = YES;
for (CategoryArray *a2 in filterResults) {
if ([a1.label isEqualToString:a2.label] && [a1.url isEqualToString:a2.url]) {
copy = NO;
break;
}
}
if (copy) {
[filterResults addObject:a1];
}
}
}
您将获得没有重复值的类别数组 您可以看到修改代码。我认为这会奏效。
答案 4 :(得分:0)
如果您担心订单,那么您可以这样做。
NSArray * newArray = [[NSOrderedSet orderedSetWithArray:oldArray] array]; // iOS 5.0及更高版本