2012-04-12 6 views
0

Мой отредактированный вопрос: - Я скопировал массив. Но проблема в том, что нижняя строка выполняет [mainRestaurantArray removeObjectAtIndex: j]; index of the mainRestaurantArray уменьшается. И это не позволит удалить правильное индексированное значениеУдаление дублирующегося значения из Nsmutablearray + iphone

Как показано на рисунке, ошибка индекса не указана. Becoz общий индекс arrayRestaurantList -31 и общий индекс mainRestaurantArray-25 (после удаления дублирующегося значения).

if([arrayRestaurantList count]==[mainRestaurantArray count]){ 
    BtnMore.hidden=YES; 
    TablView.frame=CGRectMake(0,57, 320, 360); 
    } else{ 
    [mainRestaurantArray removeAllObjects]; 
    mainRestaurantArray=[[NSMutableArray arrayWithArray:arrayRestaurantList] retain]; 
    if ([arrayRestaurantList count]>10) { 
     for (int i=0;i<[arrayRestaurantList count]-10;i++) { 
      NSString *Old_data; 
      Old_data=[[arrayRestaurantList objectAtIndex:i] objectForKey:@"Name"]; 
      NSLog(@"olddata==>%@",Old_data); 
      for (int j=[arrayRestaurantList count]-10;j<[arrayRestaurantList count];j++) {    
       NSString *New_data;    
       New_data=[[arrayRestaurantList objectAtIndex:j] objectForKey:@"Name"]; 
       NSLog(@"olddata==>%@ newdata==>%@",Old_data,New_data); 
       if ([New_data isEqualToString:Old_data]) { 
        //BtnMore.hidden=YES;     
        [mainRestaurantArray removeObjectAtIndex:j]; 

       } 
      } 
     } 
    } 
    } 

У меня есть NSMutableArray (mainRestaurantArray), который заполняется из данных, которые наступающие в качестве ответа от веба-сервиса.

Данные mainRestaurantArray, как: -

{ 
    Address = "Ellisbridge Opposite Parimal Garden Near Doctor House Ahmedabad Gujarat 380006 India (Collegian Restaurant)"; 
    Image = ""; 
    Latitude = "23.020119999999999"; 
    Longitude = "72.556343999999996"; 
    Name = "Collegian Restaurant"; 
    "Phone_Number" = "079 26401020"; 
    url = ""; 
} 
{ 
    Address = "Ground Floor Aakash Ganga Ellisbridge B/H Gujrat College : Next To Art Palace Ellisbridge Ahmedabad Gujarat 380006 India (TC's Bread Shop)"; 
    Image = ""; 
    Latitude = "23.023137999999999"; 
    Longitude = "72.560096000000001"; 
    Name = "TC's Bread Shop"; 
    "Phone_Number" = "079 26568158"; 
    url = ""; 
} 
{ 
    Address = "Center Point Panchwati Crossing C G Road Ahmedabad Gujarat 380009 India (Kings Food Factory)"; 
    Image = ""; 
    Latitude = "23.022670000000002"; 
    Longitude = "72.555651999999995"; 
    Name = "Kings Food Factory"; 
    "Phone_Number" = "079 4002 1122"; 
    url = "http://www.kingsfoodfactory.com"; 
} 

в словаре т.е. form.Now некоторое время это случается, что данные получают repeated.So я хочу, чтобы удалить его. Я написал код, как показано ниже:

if ([mainRestaurantArray count]>10) { 
     for (int i=0;i<[mainRestaurantArray count]-10;i++) { 
      NSString *Old_data; 
      Old_data=[[mainRestaurantArray objectAtIndex:i] objectForKey:@"Name"]; 
      NSLog(@"olddata==>%@",Old_data); 
      for (int j=[mainRestaurantArray count]-10;j<[mainRestaurantArray count];j++) {    
       NSString *New_data;    
       New_data=[[mainRestaurantArray objectAtIndex:j] objectForKey:@"Name"]; 
       NSLog(@"olddata==>%@ newdata==>%@",Old_data,New_data); 
       if ([New_data isEqualToString:Old_data]) { 
        BtnMore.hidden=YES; 
        TablView.frame=CGRectMake(0,57, 320, 360); 
        [mainRestaurantArray removeObjectAtIndex:j]; 

       } 
      } 
     } 
    } 

Но проблема в этом коде, когда я удалить значение ссылка теряться .. Так применение получить crashed.Can кто-нибудь помочь мне, как получить удалить данные

заранее спасибо ...

+1

поскольку вы используете тот же массив для удаления и петли, эта проблема произошла, просто сделайте копию массива, а затем после завершения копируйте отредактированный массив снова в исходный. –

+0

Опубликуйте журнал сбоев – Saphrosit

+0

@AalokParikh спасибо за ответ. Я скопирую массив. Но у меня была такая же проблема с сбоем. Пожалуйста, проверьте мой вопрос на вопрос –

ответ

5
NSArray *cleanedArray = [[NSSet setWithArray:listItems] allObjects]; 

// ListItems ваш объект NSMutableArray.

+0

@Alexander 'NSOrderedSet 'если это проблема –

+2

Я собирался понизить голос на том основании, что это не эквивалентно тому, что на самом деле пытается сделать код пользователя. Исходный код выполняет сравнение только по имени, а не по всему словарю. Тем не менее, это может быть то, что спрашивает * хочет *, поэтому вместо этого вы можете выбрать действительно элегантное решение. – JeremyP

+0

@ Александр Я ответил только на вопрос задающего вопрос. – akk

0

Вот код удаления дубликатов значений из NSMutable Array. .it будет работать для вас. туАггау вашего Mutable массив, который вы хотите удалить значение дубликатов ..

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]; 
    } 
} 

Теперь распечатайте массив и будет видеть не повторяются значение

1

Вы можете использовать этот метод для этого

+(NSMutableArray*)GetFilterData :(NSMutableArray*)array; 
{ 
//Filter duplicate data 
NSArray *copy = [array copy]; 
NSInteger index = [copy count] - 1; 
for (id object in [copy reverseObjectEnumerator]) { 
    if ([array indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) { 
     [array removeObjectAtIndex:index]; 
    } 
    index--; 
} 
[copy release]; 
NSLog(@"arr %@",[array description]); 
return array; 
} 
Смежные вопросы