Ios 数组中NString范围的谓词
我有一个数组(Ios 数组中NString范围的谓词,ios,objective-c,nsstring,nsarray,nspredicate,Ios,Objective C,Nsstring,Nsarray,Nspredicate,我有一个数组(NSArray) NSArray *cityArry = @[@"Chennai", @"Mumbai", @"Kolkata"]; 例如,我提到了带有3个对象的NSArray,但实际上在运行时,我有一个包含1000多个对象的数组 现在我有了字符串(NSString)“chennai Tnagar” 现在我想知道scanedStr的范围是否包含在cityary中。例如,我应该从cityArry获取输出为@“Chennai” 我知道我们可以通过循环NSArray并使用rangeof
NSArray
)
NSArray *cityArry = @[@"Chennai", @"Mumbai", @"Kolkata"];
例如,我提到了带有3个对象的NSArray
,但实际上在运行时,我有一个包含1000多个对象的数组
现在我有了字符串(NSString
)“chennai Tnagar”
现在我想知道scanedStr
的范围是否包含在cityary
中。例如,我应该从cityArry
获取输出为@“Chennai”
我知道我们可以通过循环NSArray
并使用rangeofstring
来获得输出。因为我有1000多个对象,所以我不想做循环。请指导我并帮助我解决这个问题
提前感谢我建议您像一样使用SQL查询,使用sqlite3作为所有城市列表的数据库。实现一个数据库有点痛苦,但我认为它解决了这个问题。我建议您使用SQL查询
,就像使用sqlite3作为所有城市列表的数据库一样。实现数据库有点痛苦,但我认为它解决了这个问题。基本上可以拆分字符串并在cityArry上搜索数组
NSString *scannedStr = @"Chennai Tnager";
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF in[cd] %@", [scannedStr componentsSeparatedByString:@" "]];
[cityArray filteredArrayUsingPredicate: predicate];
您基本上可以拆分字符串并在cityArry上搜索数组
NSString *scannedStr = @"Chennai Tnager";
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF in[cd] %@", [scannedStr componentsSeparatedByString:@" "]];
[cityArray filteredArrayUsingPredicate: predicate];
我确信这是另一个答案的副本,但我找不到。如果有人可以的话,请把这个当作傻瓜关上
无论如何,
中的操作符可以很好地处理字符串。很明显,它是未记录的,因此您必须决定是否要依赖它:
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];
我确信这是另一个答案的副本,但我找不到。如果有人可以的话,请把这个当作傻瓜关上
无论如何,
中的操作符可以很好地处理字符串。很明显,它是未记录的,因此您必须决定是否要依赖它:
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];
您的算法是否匹配“Che”?不,我不想在“scannedstr”为“Che”时获得输出。当NSSting'scannedstr'像'chennai sometext'、'sometext chennai'等时,我想得到它。但是“Tnagar”呢?“Tnagar sometext”和“sometext Tnagar”也将匹配?您的算法是否匹配“Che”?不,我不想在“scannedstr”为“Che”时获得输出。当NSSting'scannedstr'像'chennai sometext'、'sometext chennai'等时,我想得到它。但是“Tnagar”呢?“Tnagar sometext”和“sometext Tnagar”也会匹配?哇。。。谢谢。。这就像一个魔术:)但我担心的是,这是优化的方法吗?是的,谓词是在Objective C中过滤集合的最佳方法。@PrashanthRajagopalan:相比之下,显式循环可以比谓词更快。请允许我为您的算法介绍一些扩展的测试数据:cityArry=@[@“Chennai”,“New York”]
和scannedStr=@“纽约市”
。这个算法能产生预期的结果吗?@MartinR在屋子里!我几乎可以肯定,我的回答中的信息来自您对另一个问题的评论或回答。你能把它挖出来吗?我找不到。哇。。。谢谢。。这就像一个魔术:)但我担心的是,这是优化的方法吗?是的,谓词是在Objective C中过滤集合的最佳方法。@PrashanthRajagopalan:相比之下,显式循环可以比谓词更快。请允许我为您的算法介绍一些扩展的测试数据:cityArry=@[@“Chennai”,“New York”]
和scannedStr=@“纽约市”
。这个算法能产生预期的结果吗?@MartinR在屋子里!我几乎可以肯定,我的回答中的信息来自您对另一个问题的评论或回答。你能把它挖出来吗?我找不到它。我确实发布了一个类似的答案(),但后来我删除了它,因为这种行为没有文档记录,而且@Inase-36在他对同一个问题的答案()中显示,这可以通过一个更简单的文档谓词来实现。@Monolo你的答案是完美的。但你是说它是非法的。我能用它吗?@PrashanthRajagopalan事实上,我被昨天的@MartinR's误导了一点,它使用了
中优雅的。您只需将谓词转过来,在格式字符串中使用记录在案的CONTAINS
,如下所示:@“%@CONTAINS[cd]SELF”
。我会更新答案。我确实发布了一个类似的答案(),但后来我删除了它,因为这种行为没有记录在案,而且@Inase-36在他对同一个问题的答案()中显示,这可以通过一个更简单的记录谓词来实现。@Monolo你的答案是完美的。但你是说它是非法的。我能用它吗?@PrashanthRajagopalan事实上,我被昨天的@MartinR's误导了一点,它使用了
中优雅的。您只需将谓词转过来,在格式字符串中使用记录在案的CONTAINS
,如下所示:@“%@CONTAINS[cd]SELF”
。我会更新答案。