Iphone 如何删除NSMutableArray中的重复值
我正在使用NSMutableArray扫描wifi信息,但出现的重复值很少,因此我尝试使用以下代码,但仍然获得重复值Iphone 如何删除NSMutableArray中的重复值,iphone,nsmutablearray,duplicate-removal,Iphone,Nsmutablearray,Duplicate Removal,我正在使用NSMutableArray扫描wifi信息,但出现的重复值很少,因此我尝试使用以下代码,但仍然获得重复值 if([scan_networks count] > 0) { NSArray *uniqueNetwork = [[NSMutableArray alloc] initWithArray:[[NSSet setWithArray:scan_networks] allObjects]]; [scan_networks removeAllObjects];
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]];
}
这是如何解决的,谢谢您首先应该使用
要消除数组中的所有双项,请参见以下问题:
您首先应该使用
要消除数组中的所有双项,请参见以下问题:
您可以使用NSSET,但如果您只在订单无关紧要的情况下使用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];
你可以使用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];
以下是从NSMutable数组中删除重复值的代码..它将适用于您。 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
以下是从NSMutable数组中删除重复值的代码..它将适用于您。 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
我认为这样做更好:
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];
根据我的经验,如果在循环时操作数组,可能会遇到问题。我认为这样做更好:
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];
根据我的经验,如果在循环时操作数组,可能会遇到问题。也许您可以尝试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
也许你可以试试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
这是另一种方式:
- (NSArray *)removeDuplicatesFrom:(NSArray *)array {
NSSet *set = [NSSet setWithArray:array];
return [set allObjects];
}
这是另一种方式:
- (NSArray *)removeDuplicatesFrom:(NSArray *)array {
NSSet *set = [NSSet setWithArray:array];
return [set allObjects];
}
我尝试过NSMutableSet,但仍然无法删除,NSSet要求您的对象实现-hash和-isEqual:,您做到了吗?我尝试过NSMutableSet,但仍然无法删除,NSSet要求您的对象实现-hash和-isEqual:,您做到了吗?