#iphone #objective-c #ios4 #xcode4.2
#iPhone #objective-c #ios4 #xcode4.2
Вопрос:
У меня есть массив, подобный fallowing,
NSArray*array = [NSArray arrayWithObjects:@"1.1 something", @"1.2 something else", @"1.3 out of left field", @"1.4 yet another!", nil];
Теперь у меня есть строка, подобная fallowing,
NSString*str = @"1.3";
Теперь я отправлю str .Затем ему нужно найти этот str в массиве и вернуть индекс объекта, в котором был найден этот текст.Означает, что мне нужен индекс 2, который должен отображаться в качестве выходных данных.Кто-нибудь может поделиться кодом, пожалуйста.Заранее спасибо.
Комментарии:
1. Я изменил ваш набор данных, чтобы точнее отразить то, что, как мне кажется, вы хотите спросить. Ваш старый набор данных сбивал людей с толку, потому что числа были единственными отличиями между строками.
Ответ №1:
Вот пример использования блоков, обратите внимание на метод: hasPrefix:
NSArray *array = [NSArray arrayWithObjects:@"1.1 problem1", @"1.2 problem2", @"1.3 problem3", @"1.4 problem4", nil];
NSString *str = @"1.3";
NSUInteger index = [array indexOfObjectPassingTest:
^(id obj, NSUInteger idx, BOOL *stop) {
return [obj hasPrefix:str];
}];
NSLog(@"index: %lu", index);
Вывод NSLog:
index: 2
Ответ №2:
Сначала комментарий,
NSString *str = 1.3;
не создает NSString
объект. Вместо этого вы должны иметь
NSString *str = @"1.3";
Для поиска NSArray
вам придется либо изменить строку на точную строку в массиве, либо также выполнить поиск NSString
. В первом случае просто выполните
float num = 1.3;
NSString *str = [NSString stringWithFormat:@"%.1f problem%d",num,(num*10)%10];
[array indexOfObject:str];
Вы также можете стать более популярным, используя NSPredicate
s.
Комментарии:
1. Отличный вариант. Но если я отправил completestring, ничего не имеет значения, есть прямой метод indexOfObject . Но я отправлю только 1.3 . Просто прочитайте вопрос еще раз. В любом случае, спасибо.
Ответ №3:
Попробуйте
NSString *searchString = [str stringByAppendingFormat: @" problem%@", [str substringFromIndex: 2]];
NSUInteger index = [array indexOfObject: searchString];
Или (потому что вам почему-то нравятся oneliners):
[array indexOfObject: [[array filteredArrayUsingPredicate: [NSPredicate predicateWithFormat: @"SELF beginswith %@", str]] objectAtIndex: 0]];
Комментарии:
1. Я ничего не буду менять. у меня тот же массив и та же строка. И я отправлю только 1.3-йыыыыыыыы. тогда я хочу индекс. Я думаю, теперь вы поняли, в чем дело.
Ответ №4:
Самый простой способ — перечислить значения массива и проверить подстроки:
NSArray *array = [NSArray arrayWithObjects: @"1.1 something", @"1.2 something else", @"1.3 out of left field", @"1.4 yet another!", nil];
NSString *str = @"1.33";
int i = -1;
int index = -1;
for (NSString *arrayString in array) {
i ;
if ([arrayString rangeOfString: str].location != NSNotFound) {
index = i;
break;
}
}
NSLog(@"Index: %d", index);
Не оптимально, но будет работать.