2013-06-07 3 views
0

В моем приложении есть массив с несколькими одинаковыми значениями. Мне нужно удалить только одно значение из массива, независимо от того, имеет ли он в нем столько же значений.Удалите только один элемент из массива, имеющего те же самые значения.

Level1 Business, 
Level2 Economy, 
Level2 Economy, 
Level1 Business 

Как это может быть достигнуто, и главное, что эти значения являются динамическими, они могут быть более или менее. Пожалуйста, руководство для выше. Ниже я пытаюсь.

if([arr containsObject:[NSString stringWithFormat:@"%d",ind]]){ 
[arr removeObject:[NSString stringWithFormat:@"%d",ind]]; 
} 

Эта вещь удаляет все подобные записи, не требуются. Заранее спасибо.

+0

Почему вы не получите различные значения из массива, а не удалять по одному? –

+0

@RajanBalana Это тип мест в карте мест, а несколько мест имеют одинаковый тип и уровень. Таким образом, при отмене выбора места удаляет запись из массива своего типа и уровня. –

+0

не было бы намного проще хранить словарь вместо того, чтобы сохранить счет для каждого другого элемента, который вы можете уменьшить? – micantox

ответ

4

попробовать, как это,

NSArray *array = [NSArray arrayWithObjects:@"Level1 Business", @"Level2 Economy", @"Level2 Economy", @"Level1 Business", nil]; 
NSMutableArray *mainarray=[[NSMutableArray alloc]initWithArray:array]; 
int n=[mainarray indexOfObject:@"Level2 Economy"];//it gives first occurence of the object in that array 
if(n<[mainarray count]) // if the object not exist then it gives garbage value that's why here we have to take some condition 
    [mainarray removeObjectAtIndex:n]; 
NSLog(@"%@",mainarray); 

O/P: -

(
    "Level1 Business", 
    "Level2 Economy", 
    "Level1 Business" 
) 
+0

Вы ждете меня, чтобы спросить нового. вопрос –

+0

в любом случае спасибо, что кажется правильным и работает также, но я буду принимать его в понедельник после надлежащего прохождения через него. Спасибо за ответ. –

+0

@iPhone Программно: приветствую моего дорогого друга. –

1

Используйте [arr removeObjectAtIndex:yourIndex ], чтобы удалить объект в perticular постион при динамическом

0
NSMutableArray *uniques= [[NSMutableArray alloc] init]; 

for (NSString *word in duplicateWordsArray){ 
    if (!uniques.contains(word)){ 
      [ uniques addObject:word]; 
    } 
} 

Я написал это из моего телефон, поэтому он не отформатирован для кода, но это сделает это для вас быстро, и у вас будет массив (uniquearray) который имеет уникальные слова. Затем вы можете использовать, что один или установить исходный массив = уникальной массив

1

Как вы говорите,

[array removeObject:@"SomeObject"]; 

удаляет всех экземпляров где isEqual: возвращает YES. Чтобы удалить только первый экземпляр, вы можете использовать что-то вроде

NSUInteger index = [array indexOfObject:@"SomeObject"]; 
if(index != NSNotFound) { 
    [array removeObjectAtIndex:index]; 
} 
0

Здесь ваше требование похоже на определение NSSet, которое содержит только уникальные объекты. Но это будет подразумевать только, если оба одинаковых объекта значения действительно относятся к тому же месту памяти.

Если это так, то и тогда, вы можете попробовать код, упомянутый ниже:

// create set from an array 
NSSet *telephoneSet = [NSSet setWithArray: myArray]; 

// create array from a set 
NSMutableArray *array = [NSMutableArray arrayWithArray:[set allObjects]]; 

Я не знаю, будет ли это работать на ваше требование или нет. Но для этого потребуется проверить уровень равенства объектов.

И все же это может помочь вам в качестве меньшей строки кода.

1

Пример кода:

NSMutableArray *arr = [[NSMutableArray alloc]initWithObjects:@"hello",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",@"hi",nil]; 
NSUInteger obj = [arr indexOfObject:@"hi"]; //Returns the lowest integer of the specified object 
[arr removeObjectAtIndex:obj]; //removes the object from the array 
NSLog(@"%@",arr); 

В вашем случае:

if([arr containsObject:[NSString stringWithFormat:@"%d",ind]]) 
{ 
    NSUInteger obj = [arr indexOfObject:[NSString stringWithFormat:@"%d",ind]]; //Returns the lowest integer of the specified object 
    [arr removeObjectAtIndex:obj]; 
} 
0
NSArray *input = [NSArray arrayWithObjects:@"Level1 Business", @"Level2 Economy", @"Level2 Economy", @"Level1 Business", nil]; 
    NSMutableArray *output = [[NSMutableArray alloc] init]; 
    [output addObject:[input objectAtIndex:0]]; 
    for(NSString *value in input) { 
     if(![output containsObject:value]) 
     [output addObject:value]; 
    } 
Смежные вопросы