2014-06-10 23 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];