1

NSMutableArrayを使用してwifi情報をスキャンしていますが、重複する値がほとんど表示されないため、次のコードを使用しようとしますが、重複する値を取得します。

if([scan_networks count] > 0) 
{
    NSArray *uniqueNetwork = [[NSMutableArray alloc] initWithArray:[[NSSet setWithArray:scan_networks] allObjects]];
    [scan_networks removeAllObjects];

    NSSortDescriptor *networkName = [[[NSSortDescriptor alloc] initWithKey:@"SSID_STR" ascending:YES] autorelease];
    NSArray *descriptors = [NSArray arrayWithObjects:networkName,nil];

    [scan_networks addObjectsFromArray:[uniqueNetwork sortedArrayUsingDescriptors:descriptors]];
}

これをどのように解決できるか、ありがとう

4

6 に答える 6

4

NSSETを使用することもできますが、注文が問題にならない場合にのみ使用する場合は、このアプローチを使用してください。私はこれを使用しましたが、完璧な答えが得られます。NSmutableArray配列の代わりに、重複する値を含むNSmutableArrayを配置します。

NSArray *copy = [NSmutableArray copy];

NSInteger index = [copy count] - 1;

for (id object in [copy reverseObjectEnumerator])
 {

 if ([NSmutableArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound)

 {
        [NSmutableArray removeObjectAtIndex:index];

 }

    index--;
}

[copy release];
于 2011-10-31T09:25:02.597 に答える
4

NSMutableSetそもそもを使用する必要があります。

配列内のすべてのdoubleエントリを削除するには、次の質問を参照して
ください:NSMutableArrayまたはNSMutableSetを一意にします。

于 2009-12-07T08:45:37.690 に答える
3

これは、NSMutableArrayから重複する値を削除するコードです。これでうまくいきます。myArrayは、重複する値を削除する可変配列です。

for(int j = 0; j < [myArray count]; j++){
    for( k = j+1;k < [myArray count];k++){
        NSString *str1 = [myArray objectAtIndex:j];
        NSString *str2 = [myArray objectAtIndex:k];
        if([str1 isEqualToString:str2])
            [myArray removeObjectAtIndex:k];
       }
}
// Now print your array and 
于 2012-05-15T09:01:09.307 に答える
1

私はこれを行う方が良いと思います:

 NSMutableIndexSet *indexes = [[NSMutableIndexSet alloc]init];

 for(int j = 0; j < [myArray count]; j++) {

 for( k = j+1;k < [myArray count];k++) {

    NSString *str1 = [myArray objectAtIndex:j];
    NSString *str2 = [myArray objectAtIndex:k];
    if([str1 isEqualToString:str2])
        [indexes addIndex:k];
   }
}

[myArray removeObjectsAtIndexes:indexes];

私の経験では、ループ中に配列を操作すると問題が発生する可能性があります。

于 2012-06-27T16:06:30.880 に答える
1

これは別の方法です:

- (NSArray *)removeDuplicatesFrom:(NSArray *)array {
    NSSet *set = [NSSet setWithArray:array];
    return [set allObjects];
}
于 2015-03-30T16:00:31.973 に答える
0

たぶん、NSArrayカテゴリを試すことができます。

#import <Foundation/Foundation.h>

@interface NSArray(filterRepeat)
-(NSArray *)filterRepeat;

@end


#import "NSArray+repeat.h"
@implementation NSArray(filterRepeat)
-(NSArray *)filterRepeat
{
    NSMutableArray * resultArray =[NSMutableArray array];
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if (![resultArray containsObject: obj]) {
            [resultArray addObject: obj];
        }
    }];
    return resultArray;
}
@end
于 2013-08-06T16:26:22.787 に答える