Пошук рядків у масиві рядків у об’єкті 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.