2013-06-27 2 views
0

Ее основной вопрос, но, пожалуйста, помогите: -Как проверить, если строка в NSArray меняется

Сценарий: - У меня есть NSArray {@"Bat",@"Bat",@"Bat",@"Bat"@"Ball",@"Ball",@"Cricket"} и будет приходить из веб-сервиса, в основном я хочу, чтобы увеличить значение, если оно меняется с Бата на шарик, но с еще одним условием, что в последующем должно быть не менее двух шаров

например, в приведенном выше случае, если x = 0, то после итерации на Nsarray значение будет 1 coz, будет только один крикет, если было два последовательных сверчка, тогда значение будет равно 2.

Дайте мне знать, если вопрос непонятен или нет, нужна помощь в этом. Заранее благодарим за помощь

+1

Ваш вопрос не очень ясен. Что вы хотите получить в переменной x? Вы хотите получить количество повторяющихся вхождений каждой строки, или вы хотите, сколько раз строка меняется, или что-то еще? – aksh1t

+0

Вы хотите увеличить свою стоимость как новый элемент? – Mital

+0

@Mital Да, я хочу увеличить значение, но только если найдено две последовательные строки. – DAMM108

ответ

2

Вопрос был не очень ясен. Надеюсь, это то, что вы хотите.

NSArray *strings = @[@"Bat",@"Bat",@"Bat",@"Bat",@"Ball",@"Ball",@"Cricket",]; 

NSUInteger index = -1; 
NSString *previousString = nil; 
BOOL canIncrement = FALSE; 
for (NSString *string in strings) { 
    if (!previousString) { 
     previousString = string; 
    }else if ([previousString isEqualToString:string]){ 
     canIncrement = TRUE; 
    }else{ 
     index += canIncrement?1:0; 
     canIncrement = FALSE; 
     previousString = string; 
    } 
} 

index += canIncrement?1:0; 

NSLog(@"Index : %d",index); 
+0

Я проверил ваш код, чтобы проверить, работает ли он с моей проблемой, и я заменяю массив NSArray * strings = @ [@ "Bat", @ "Bat", @ "Bat", @ "Bat", @ "Ball", @ "Ball", @ "Cricket" @"Крикет"]; в этом случае я должен получить значение 2, поскольку теперь есть два последовательных крикета, но я получаю его, показывает только 1, только дайте мне знать, что нужно сделать – DAMM108

+0

@ DAMM108 Я обновил свой ответ. – Anupdas

+0

Инфактное значение должно быть увеличено только при наличии двух последовательных изменений в строке. Например: NSArray * string = @ [@ «Bat», @ «Bat», @ «Bat», @ «Bat», @ «Ball», @ "Бал", @ "Cricket"]; если index = 0, то значение индекса будет равным 1, так как есть только один крикет, но если бы была две последовательные строки крикета, тогда значение будет равно 2 – DAMM108

1

Почему вы не обходите и не поддерживаете NSDictionary с «Ball», «Bat» и «Cricket» и т. Д. Как индекс или ключ соответственно, а объект NSNumber как значение?

Или он должен быть массивом вообще? В конце мы находимся в среде ООП. Вы могли бы изобрести объект gear, который содержит данные в словаре или даже массив или что-то и предоставляет такие методы, как addBat или addGear:(NSString *)gearType или так, делает подсчет для вашего и обеспечивают аксессор как batCount или gearCount:(NSString*)gearType

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

+0

Спасибо @hermann Klecher, попробуем это тоже :) – DAMM108