带有双重条目的NSArray

时间:2013-01-09 13:51:12

标签: iphone xcode nsarray

我有一个包含大量条目的NSArray。但其中一些是两次。 而且我希望每个条目在Array中只有一次。

有人知道我该怎么做吗?

这就是我尝试过的方式:

NSSet *newsSet = [NSSet setWithArray:news];
newsOrte = [newsSet allObject];

3 个答案:

答案 0 :(得分:0)

为了有效地使用NSSet,存储的对象必须符合NSObject协议并实施hashreference)和isEqual:({ {3}})方法。

请确保您的对象实现这些方法。

答案 1 :(得分:0)

试试这种方式

NSArray *array=[[NSMutableArray alloc]initWithObjects:@"A",@"B",@"A",@"C",@"A", nil];    
NSMutableArray *arr=[NSMutableArray new];
for(id obj in array){
    if (![arr containsObject:obj]) {
        [arr addObject:obj];
    }
}
array=arr;
NSLog(@"==> %@",array);

你也可以这样做:

NSArray *array=[[NSMutableArray alloc]initWithObjects:@"A",@"B",@"A",@"C",@"A", nil];    
NSMutableDictionary *dict=[[NSMutableDictionary alloc]initWithObjects:array forKeys:array];
array=[dict allKeys];

NSLog(@"==> %@",array);

输出:

==> (
    A,
    B,
    C
)

答案 2 :(得分:-1)

这是代码

NSArray* originalArray = ... // However you fetch it
NSMutableSet* existingNames = [NSMutableSet set];
NSMutableArray* filteredArray = [NSMutableArray array];
for (id object in originalArray) {
   if (![existingNames containsObject:[object name]]) {
      [existingNames addObject:[object name]];
      [filteredArray addObject:object];
   }
}
originalArray = [NSArray arrayWithArray:filteredArray];

希望它可以帮助你..