Пошук рядків у масиві рядків у об’єкті 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]; я хотів шукати "тести", скажімо, тоді я хотів, щоб працював штукарський знак, який я не міг зрозуміти, тому я поставив це питання, але дякую за відповідь, вдячний
Брудний Найт,

Ви або переглядаєте і перевіряєте кожне значення, або заглядаєте в NSPredicate, який забезпечує досить всебічний пошук об’єктів колекції - майже такий же потужний, як і речення SQL. 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

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,

Цей фрагмент коду чудово працює, щоб знайти слово в масиві слів.
Rahul K Rajan

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