我有一个数组(NSArray
)让我们说
NSArray *cityArry = @[@"Chennai", @"Mumbai", @"Kolkata"];
例如我提到了NSArray
有3个对象,但实际上在运行时我有一个包含1000个以上对象的数组。
现在我有了字符串(NSString
)" chennai Tnagar"
NSString *scanedStr = @"Chennai Tnagar";
所以,现在我想知道scanedStr
中cityArry
的范围是否包含@"Chennai"
。例如,我应该从cityArry
获得NSArray
的输出。
我知道我们可以通过循环rangeofstring
并使用{{1}}来获取输出。由于我有超过1000个对象,我不想做循环。请指导我并帮助我解决这个问题。
提前致谢
答案 0 :(得分:3)
你基本上可以拆分字符串并在cityArry上搜索数组。
NSString *scannedStr = @"Chennai Tnager";
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF in[cd] %@", [scannedStr componentsSeparatedByString:@" "]];
[cityArray filteredArrayUsingPredicate: predicate];
答案 1 :(得分:1)
我确信这是另一个答案的副本,但我找不到它。如果有人可以,请以欺骗手段将其关闭。
无论如何,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];
答案 2 :(得分:0)
我建议您使用SQL查询like
,使用sqlite3作为所有城市列表的数据库。它实现一个数据库有点痛苦,但它解决了我认为的问题。