Поиск строки в массиве строк в объекте 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 . Лучше сделать это перед тем, как задавать вопрос :-)

JeremyP
источник
допустим, у меня есть массив, содержащий 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
Этот фрагмент кода отлично подходит для поиска слова в массиве слов.
Рахул К Раджан
Я хочу сделать это с исходным текстом. Я имею в виду, что поисковый текст должен быть сопоставлен с начала, а не откуда-либо. Пожалуйста, помогите
Гаутам Шривастав