Предикат для диапазона NString в массиве

У меня есть массив (NSArray), пусть говорят

NSArray *cityArry = @[@"Chennai", @"Mumbai", @"Kolkata"];

Например, я упомянул NSArray с 3 объектами, но на самом деле во время выполнения у меня есть массив, который содержит более 1000 объектов.

Теперь у меня есть строка (NSString) "chennai Tnagar"

NSString *scanedStr = @"Chennai Tnagar";

Итак, теперь я хочу узнать, содержит ли диапазон scanedStr в cityArry. Например, я должен получить выход как @"Chennai" из cityArry.

Я знаю, что мы можем сделать это, зациклив NSArray и используя rangeofstring мы получим результат. Поскольку у меня более 1000 объектов, я не хочу делать цикл. Пожалуйста, помогите мне, как решить эту проблему.

заранее спасибо

0
источник поделиться
3 ответа

Вы могли бы в основном разделить строку и найти массив в cityArry.

NSString *scannedStr = @"Chennai Tnager";

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF in[cd] %@", [scannedStr componentsSeparatedByString:@" "]];

[cityArray filteredArrayUsingPredicate: predicate];
+3
источник

Я уверен, что это дубликат другого ответа, но я не могу его найти. Если кто-нибудь может, пожалуйста, закройте это как обман.

Во всяком случае, оператор IN отлично работает на строках. По-видимому, это недокументировано, поэтому вам придется решить, хотите ли вы положиться на него:

NSArray *cityArray = @[@"Chennai",@"Mumbai",@"Kolkata"];

NSString *scannedStr = @"Chennai Tnagar";

NSPredicate *pred = [NSPredicate predicateWithFormat: @"SELF IN[cd] %@", scannedStr];

NSArray *result = [cityArray filteredArrayUsingPredicate: pred];

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

Если вы хотите использовать документированную конструкцию, вы можете поменять порядок предиката и использовать обычный CONTAINS:

pred = [NSPredicate predicateWithFormat: @"%@ CONTAINS[cd] SELF", scannedStr];
+1
источник

Я предлагаю вам использовать SQL-запрос, like, используя sqlite3 в качестве базы данных списка всех городов, которые у вас есть. Это немного больно, реализуя базу данных, но она решает проблему, я думаю.

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос