对数组中NString范围的谓词

时间:2014-05-13 09:32:04

标签: ios objective-c nsstring nsarray nspredicate

我有一个数组(NSArray)让我们说

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

例如我提到了NSArray有3个对象,但实际上在运行时我有一个包含1000个以上对象的数组。

现在我有了字符串(NSString)" chennai Tnagar"

NSString *scanedStr = @"Chennai Tnagar";

所以,现在我想知道scanedStrcityArry的范围是否包含@"Chennai"。例如,我应该从cityArry获得NSArray的输出。

我知道我们可以通过循环rangeofstring并使用{{1}}来获取输出。由于我有超过1000个对象,我不想做循环。请指导我并帮助我解决这个问题。

提前致谢

3 个答案:

答案 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作为所有城市列表的数据库。它实现一个数据库有点痛苦,但它解决了我认为的问题。