我正在尝试构建搜索功能,用户可以搜索' 10'并返回包含交易金额为' 10'的结果,显然是..
采用以下数据集:
10.35 70.51 64.02
使用以下谓词语句:
transaction.amount CONTAINS [cd] 10
所有上述交易都会被退回,因为它们都包含' 1'' 0'或者两者兼而有之,我只想要包含' 10'顺序。
我尝试了许多不同的方法,包括使值字段为字符串,十进制和双精度。
有谁知道如何使用NSPredicate来做到这一点?我宁愿不下去拉下所有记录,然后使用正则表达式或类似的东西。
干杯
答案 0 :(得分:1)
使用NSString
如果您将金额存储为字符串,我觉得有点奇怪,以下工作正如您所愿:
NSArray *decimals = @[@"10.35", @"70.51", @"64.02", @"11.10"];
NSLog(@"Decimals: %@", decimals);
NSArray *tens = [decimals filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] '10'"]];
NSLog(@"Tens: %@", tens);
提供以下输出:
Decimals: (
"10.35",
"70.51",
"64.02",
"11.10"
)
Tens: (
"10.35",
"11.10"
)
使用NSNumber
如果您想将金额保留为数字,则可以执行以下操作:滥用description
的{{1}}:
NSNumber
提供以下输出:
NSArray *decimals = @[@(10.35), @(70.51), @(64.02), @(11.10)];
NSLog(@"Decimals: %@", decimals);
NSArray *tens = [decimals filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.description CONTAINS[cd] '10'"]];
NSLog(@"Tens: %@", tens);
正如您在输出中看到的那样,它没有为您提供所需的结果,因此可以在您的事务Decimals: (
"10.35",
"70.51000000000001",
"64.02",
"11.1"
)
Tens: (
"10.35",
"70.51000000000001"
)
上实现一个getter,如:
NSManagedObject
你的谓词就像是:
- (NSString *)amountSearch {
return [NSString stringWithFormat:@"%.2f", self.amount.doubleValue];
}