Поиск строки в массиве строк в объекте c


87

Я хочу найти конкретную строку в массиве строк в объекте c. Может кто-нибудь мне в этом помочь?


Это твое домашнее задание? Я думаю, это легко сделать. Почему просто зацикливание и сравнение?
— водханг

нет, это не домашнее задание, мне нужен лучший алгоритм для поиска конкретной строки, которая не стоит много ресурсов в iphone, поэтому я задаю вопрос
— Filthy Knight

возможный дубликат Objective-C Search NSArray для строки?
— nielsbot

Ответы:


193
BOOL isTheObjectThere = [myArray containsObject: @"my string"];

или если вам нужно знать, где это

NSUInteger indexOfTheObject = [myArray indexOfObject: @"my string"];

Я настоятельно рекомендую вам прочитать документацию по NSArray . Лучше сделать это перед тем, как задавать вопрос :-)


допустим, у меня есть массив, содержащий NSArray * myArr = [[NSArray alloc] initWithObjects: @ "test1", @ "test3", @ "test3", nil]; Я хотел найти "tes", скажем, тогда я хотел, чтобы работала какая-то дикая карта, которую я не мог понять, поэтому я задал этот вопрос, но спасибо за ответ, я признателен
— Filthy Knight

Вы либо просматриваете и тестируете каждое значение, либо просматриваете NSPredicate, который обеспечивает довольно полный поиск объектов коллекции - почти такой же мощный, как предложения SQL where. developer.apple.com/mac/library/documentation/cocoa/Conceptual/…
— JeremyP,

45

Вы можете использовать класс NSPredicate для поиска строк в массиве строк. См. Пример кода ниже.

NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Maruthi",@"Hyundai", @"Ford", @"Benz", @"BMW",@"Toyota",nil];

NSString *stringToSearch = @"i";

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",stringToSearch]; // if you need case sensitive search avoid '[c]' in the predicate

NSArray *results = [cars filteredArrayUsingPredicate:predicate];

Это наиболее эффективный способ поиска строк в массиве строк.


это отлично работает для небольшого массива, но если у вас очень большой массив (более 30 тыс. записей), вы можете иметь какое-нибудь представление
— amit gupta

Затем сохраните массив отсортированным и используйте двоичный поиск (bsearch) для поиска и вставки новых элементов. У NSArray / NSMutableArray есть методы для этого.
— spstanley 06

3
NSMutableArray *cars = [NSMutableArray arrayWithObjects:@"Max",@"Hai", @"Fine", @"Bow", @"Bomb",@"Toy",nil];

NSString *searchText = @"i";
 NSArray *results = [cars filteredArrayUsingPredicate:predicate];

// if you need case sensitive search avoid '[c]' in the predicate

 NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"title contains[c] %@",
                                searchText];


searchResults = [cars  filteredArrayUsingPredicate:resultPredicate];

Хотя этот фрагмент кода может ответить на вопрос, лучше включить объяснение того, как он отвечает на вопрос, чтобы этот ответ был полезен для будущих посетителей сайта
— RobV

Этот фрагмент кода отлично подходит для поиска слова в массиве слов.
— Рахул К Раджан

Я хочу сделать это с исходным текстом. Я имею в виду, что поисковый текст должен быть сопоставлен с начала, а не откуда-либо. Пожалуйста, помогите
— Гаутам Шривастав
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.