iOS : NSString 计算字符串表达式
iOS : NSString Evaluate String Expression
我有很大的 XML 文件(将近 1,27,000 条)银行记录。
在一种情况下,我们需要检查银行名称。例如
if(
[title isEqualToString:@"ABHYUDAYA COOPERATIVE BANK LIMITED" ] ||
[title isEqualToString:@"ABU DHABI COMMERCIAL BANK" ] ||
[title isEqualToString:@"AHMEDABAD MERCANTILE COOPERATIVE BANK" ] ){
////Perform certain action
}
目前我们有 XML 结构,我们正在将这个庞大的数据解析为 NSString。所以我在 NSString 对象中得到了上面的示例数据。
如何为上面的例子评估 NSString?在堆栈溢出中发现了很多使用 NSPredicate 和 NSExpression 的例子。但是根据我对这些问题的理解,他们将处理数学表达式,例如4/3 * 2 等。我无法使用这些示例处理上述格式。
有没有办法在 NSString 和 if 条件下评估上述格式?
PS - 能够通过将数据转换为数据库但寻找字符串格式的 NSString 评估来解决上述问题。
如果只是为了让你的表达更漂亮,而不是改变底层逻辑,你可以这样做:
NSArray <NSString *> *bankNames = @[@"ABHYUDAYA COOPERATIVE BANK LIMITED"
@"ABU DHABI COMMERCIAL BANK",
@"AHMEDABAD MERCANTILE COOPERATIVE BANK"];
if ([bankNames contains:title]) {
//Perform certain action
}
如果你坚持使用谓词,那么你应该这样做:
NSArray <NSString *> *bankNames = @[@"ABHYUDAYA COOPERATIVE BANK LIMITED"
@"ABU DHABI COMMERCIAL BANK",
@"AHMEDABAD MERCANTILE COOPERATIVE BANK"];
NSPredicate *containsPredicate = [NSPredicate predicate:@"%K equals %@", @"SELF", title];
BOOl matchesName = [bankNames filteredArrayUsingPredicate:predicate].count > 0;
不过,我真的不明白你为什么要那样做。
让你在一个名为response
的NSArray
中拥有你想要根据条件过滤的数据。
NSArray *expectedBanks = [NSArray arrayWithObjects:
@"ABHYUDAYA COOPERATIVE BANK LIMITED" ,
@"ABU DHABI COMMERCIAL BANK" ,
@"AHMEDABAD MERCANTILE COOPERATIVE BANK", nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"bank IN %@", expectedBanks];
NSArray *filtered = [response filteredArrayUsingPredicate:predicate];
上面的代码片段假设对象的键,我们需要在数组中搜索是"bank"
我有很大的 XML 文件(将近 1,27,000 条)银行记录。
在一种情况下,我们需要检查银行名称。例如
if(
[title isEqualToString:@"ABHYUDAYA COOPERATIVE BANK LIMITED" ] ||
[title isEqualToString:@"ABU DHABI COMMERCIAL BANK" ] ||
[title isEqualToString:@"AHMEDABAD MERCANTILE COOPERATIVE BANK" ] ){
////Perform certain action
}
目前我们有 XML 结构,我们正在将这个庞大的数据解析为 NSString。所以我在 NSString 对象中得到了上面的示例数据。
如何为上面的例子评估 NSString?在堆栈溢出中发现了很多使用 NSPredicate 和 NSExpression 的例子。但是根据我对这些问题的理解,他们将处理数学表达式,例如4/3 * 2 等。我无法使用这些示例处理上述格式。
有没有办法在 NSString 和 if 条件下评估上述格式?
PS - 能够通过将数据转换为数据库但寻找字符串格式的 NSString 评估来解决上述问题。
如果只是为了让你的表达更漂亮,而不是改变底层逻辑,你可以这样做:
NSArray <NSString *> *bankNames = @[@"ABHYUDAYA COOPERATIVE BANK LIMITED"
@"ABU DHABI COMMERCIAL BANK",
@"AHMEDABAD MERCANTILE COOPERATIVE BANK"];
if ([bankNames contains:title]) {
//Perform certain action
}
如果你坚持使用谓词,那么你应该这样做:
NSArray <NSString *> *bankNames = @[@"ABHYUDAYA COOPERATIVE BANK LIMITED"
@"ABU DHABI COMMERCIAL BANK",
@"AHMEDABAD MERCANTILE COOPERATIVE BANK"];
NSPredicate *containsPredicate = [NSPredicate predicate:@"%K equals %@", @"SELF", title];
BOOl matchesName = [bankNames filteredArrayUsingPredicate:predicate].count > 0;
不过,我真的不明白你为什么要那样做。
让你在一个名为response
的NSArray
中拥有你想要根据条件过滤的数据。
NSArray *expectedBanks = [NSArray arrayWithObjects:
@"ABHYUDAYA COOPERATIVE BANK LIMITED" ,
@"ABU DHABI COMMERCIAL BANK" ,
@"AHMEDABAD MERCANTILE COOPERATIVE BANK", nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"bank IN %@", expectedBanks];
NSArray *filtered = [response filteredArrayUsingPredicate:predicate];
上面的代码片段假设对象的键,我们需要在数组中搜索是"bank"