使用NSSet不敏感地从NSArray案例中删除重复项

时间:2014-06-10 12:35:01

标签: ios objective-c duplicate-removal case-insensitive

NSArray*arr = @[@"ram",@"Ram",@"vinoth",@"kiran",@"kiran"];
NSSet* uniqueName = [[NSSet alloc]initWithArray:arr];
NSLog(@"Unique Names :%@",uniqueName);

输出:

enter image description here

但我需要输出为

enter image description here

6 个答案:

答案 0 :(得分:3)

您可以先将它们全部转换为小写字符串。

NSArray *arr = @[@"ram",@"Ram",@"vinoth",@"kiran",@"kiran"];
NSArray *lowerCaseArr = [arr valueForKey:@"lowercaseString"];
NSSet* uniqueName = [[NSSet alloc] initWithArray:lowerCaseArr];
NSLog(@"Unique Names :%@",uniqueName);

唯一名称:{(     内存,     基兰,     vinoth )}

答案 1 :(得分:1)

试试这个:

NSArray *arr = [NSArray arrayWithObjects:@"Ram",@"ram", nil]; //this is your array
NSMutableArray *arr1 = [[NSMutableArray alloc]init]; //make a nsmutableArray 
for (int i = 0; i<[arr count]; i++) {
    [arr1 addObject:[[arr objectAtIndex:i]lowercaseString]];
}
NSSet *set = [NSSet setWithArray:(NSArray*)arr1];//this set has unique values

答案 2 :(得分:1)

这将始终保留原始容器中存在的外壳形式(虽然它未定义哪个外壳):

NSArray<NSString*>* input = ...
NSMutableDictionary* tmp = [[NSMutableDictionary alloc] init];
for (NSString* s in input) {
    [tmp setObject:s forKey:[s lowercaseString]];
}
return [tmp allValues];

答案 3 :(得分:0)

#Updated 使用此方法可以从数组中删除大写字符串。

 NSMutableArray *arr= [[NSMutableArray alloc]initWithObjects:@"ram",@"Ram",@"vinoth",@"kiran", nil];
 NSMutableArray *arrCopy = [[NSMutableArray alloc]init];
 for (int index = 0 ; index<arr.count; index++) {
    NSUInteger count = [[[[arr objectAtIndex:index] componentsSeparatedByCharactersInSet:[[NSCharacterSet uppercaseLetterCharacterSet] invertedSet]] componentsJoinedByString:@""] length];
    if (count == 0) {
        [arrCopy addObject:[arr objectAtIndex:index]];
    }
  }
  NSLog(@"Print Mutable Copy %@",arrCopy);

答案 4 :(得分:0)

创建一个与arr大小相同的可变数组。填写lowercaseString的每个元素的arr个版本。设置出来。

答案 5 :(得分:0)

尝试这个

NSArray *copyArray = [mainArray copy];
NSInteger index = [copyArray count] - 1;
for (id object in [copyArray reverseObjectEnumerator]) {
    if ([mainArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) {
        [mainArray removeObjectAtIndex:index];
    }
    index--;
}
copyArray=nil;