-1

多くのエントリを持つ NSArray があります。しかし、それらのいくつかは2倍です。そして、すべてのエントリが配列内で 1 回だけであることを望みます。

誰かがこれを行う方法を考えていますか?

これは私が試した方法です:

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

3 に答える 3

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
)
于 2013-01-10T04:09:08.997 に答える
0

効果的に使用するためにNSSet、格納されているオブジェクトはNSObjectプロトコルに準拠し、 hash(参照) およびisEqual:(参照) メソッドを実装する必要があります。

オブジェクトがこれらのメソッドを実装していることを確認してください。

于 2013-01-09T14:05:31.103 に答える
-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];

それがあなたを助けることを願っています..

于 2013-01-09T13:55:34.543 に答える