Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 数组中NString范围的谓词_Ios_Objective C_Nsstring_Nsarray_Nspredicate - Fatal编程技术网

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”
。我会更新答案。