2017-05-05 46 views
0

我有一個數組,作爲爲了得到重複,以及原始項目從一個數組中的iOS

(約翰·簡,約翰)

我想重複,以及陣列的原始元素像

(約翰,約翰) 我能夠從代碼 這裏

NSArray *names = [NSArray arrayWithObjects:@"John", @"Jane", @"John", nil]; 
NSCountedSet *set = [[NSCountedSet alloc] initWithArray:names]; 

for (id item in set) 
{ 
    NSLog(@"Name=%@, Count=%lu", item, (unsigned long)[set countForObject:item]); 
    if((unsigned long)[set countForObject:item]>1){ 
     NSLog(@"of repeated element-----=%@",item); 
    } 
} 

「重複元素的名稱-----約翰」得到單一的次數,但我想要所有重複元素的出現,如「重複元素名稱 - 約翰,約翰」。

+0

維基百科在Set(Mathematics) 一組是定義明確的對象的集合。 也許混淆來自一個集合不依賴於其元素顯示方式的事實。如果元素據稱重複或重新排列,則集合保持不變。因此,如果元素已經屬於它,我知道的編程語言將不會將元素放入集合中,或者如果元素已經存在,它們將替換它,但絕不會允許重複。 –

+0

所以你想分開重複元素到另一個數組? – Himanth

+0

是的,我想單獨重複它的原始元素重複值像數組[約翰,簡,約翰]我想分開新的數組作爲[約翰,約翰] –

回答

1

試試這個使用NSPredicate

NSArray *array = [NSArray arrayWithObjects:@"John", @"Jane", @"John",@"Jane",@"Jane", nil]; 
NSMutableArray *arrResult = [[NSMutableArray alloc] init]; 
NSCountedSet *set = [[NSCountedSet alloc] initWithArray:array]; 
for(id name in set) 
    { 
     if([set countForObject:name] > 1){ 
      NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF = %@", name]; 
      [arrResult addObjectsFromArray:[array filteredArrayUsingPredicate:predicate]]; 
     } 
    } 
    // 
    NSLog(@"%@",arrResult); 
0

我不確定你的最終目的,你想要的結果看起來毫無意義。總之,學習的目的,下面是一個實現;)

NSArray *names = [NSArray arrayWithObjects:@"John", @"Jane", @"John", nil]; 

NSMutableDictionary *countDict = [NSMutableDictionary dictionary]; 
for (NSString *name in names) { 
    if (countDict[name] == nil) { 
     countDict[name] = [NSMutableString stringWithString:name]; 
    } 
    else{ 
     NSMutableString *repeatedName = (NSMutableString *)countDict[name]; 
     [repeatedName appendString:@","]; 
     [repeatedName appendString:name]; 
    } 
} 
[countDict enumerateKeysAndObjectsUsingBlock:^(NSString *_Nonnull name, NSString * _Nonnull repeatedNames, BOOL * _Nonnull stop) { 
    if (repeatedNames.length > name.length) { 
     NSLog(@"Name of repeated element-----%@",repeatedNames); 
    } 
}]; 

輸出:重複元素的名稱-----約翰,約翰

+0

我的最終目的是讓用戶知道在我正在填充的tableview中有重複的條目,然後讓用戶刪除任何一個Duplicate元素。 –

0

嘗試此代碼使用loop

NSArray *names = [NSArray arrayWithObjects:@"John", @"Jane", @"John",@"John", nil]; 
     NSCountedSet *set = [[NSCountedSet alloc] initWithArray:names]; 
     NSMutableArray *repeatedArray = [[NSMutableArray alloc] init]; 
     for (id item in set) 
     { 
      NSLog(@"Name=%@, Count=%lu", item, (unsigned long)[set countForObject:item]); 
      if((unsigned long)[set countForObject:item]>1){ 
       NSLog(@"of repeated element-----=%@",item); 
       for(int i=0;i<[set countForObject:item];i++) 
       { 
        [repeatedArray addObject:item]; 
       } 

     } 

輸出:約翰,約翰,約翰

相關問題