2014-06-10 68 views
1
从NSArray的情况下重复
NSArray*arr = @[@"ram",@"Ram",@"vinoth",@"kiran",@"kiran"]; 
NSSet* uniqueName = [[NSSet alloc]initWithArray:arr]; 
NSLog(@"Unique Names :%@",uniqueName); 

输出:删除不区分大小写使用的NSSet

enter image description here

,但我需要的输出作为

enter image description here

+0

如果有重复的情况下,但在其他方面相同的工作,你想如何选择哪一个? – zaph

回答

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); 
+1

看看我的问题我需要不区分大小写 –

+0

我已经更新了我的答案。检查它 –

0

创建一个与arr大小相同的可变数组。用lowercaseString版本的每个元素arr填充它。解决这个问题。

+1

问题不在于改变阵列成员的情况。 – zaph

+0

你可以在这里解释一下你的代码 –

+0

@Zaph - 当我阅读它时,问题是关于创建一组独特的字符串,如果情况被忽略。通过创建一个代理字符串数组作为考虑事项已被删除,结果集应具有OP要求的值。 –

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 
+0

感谢它的伟大工作 –

+0

我从来不知道NSSet。 “请记住,NSSet由独特的元素组成,所以这是删除数组中所有重复项的便捷方式”+1 –

2

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

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

唯一的名称:{( RAM, 基兰, vinoth )}

+0

简明!这假定OP想要小写所有的值,这个问题在这个问题上没有形成。 – zaph

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; 
1

这将始终保持这是在原来的容器中现有的外壳形式(虽然它没有定义哪个外壳):

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