iOS NSPredicate 包含来自索引
iOS NSPredicate Contains from an index
我有一个 NSArray
这样的:"test01_asdf","test01_efgh","test02_ghjk"
。
我需要使用 NSPredicate
包含过滤这些项目,但我必须将过滤操作范围限制为第 7 个字符之后的所有字符。
我的意思是:忘记 "testNN_" 部分,仅对其余字符串("asdf"、"efgh"、"ghjk")使用包含过滤器。
因此,如果搜索文本是 "e",它只会 return "test01_efgh" 而不是所有项目,因为它们都包含单词 "test" 中的 "e"。
我是一个接收此输入并必须给出该输出的黑匣子。
现在我有这条线:
NSPredicate *predicateFilter = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", [myfilterstring lowercaseString]];
构造另一个数组,使用 substring 将这些元素切碎,对其进行您想要的操作,并利用它的 ids 或元素编号在原始数组中使用,希望这有帮助。
鉴于你是一个块盒,只需要提供输出,我不确定你为什么要使用NSPredicate。在没有 NSPredicate 的情况下,有许多更方便的方法可以解决这个问题。
但由于 NSPredicate 可以采用任意测试块,您可以编写一个谓词来解决这个问题;您不限于内置语言:
import Foundation
func filterArray(array: [String]) -> [String] {
let predicate = NSPredicate { (value, _) -> Bool in
let string = value as! NSString
if string.length > 7 {
return string.substringFromIndex(7).containsString("e")
}
return false
}
var matches: [String] = []
for value in array {
if predicate.evaluateWithObject(value) {
matches.append(value)
}
}
return matches
}
let array = ["test01_asdf","test01_efgh","test02_ghjk"]
print(filterArray(array))
使用 MATCHES
而不是 CONTAINS
。
NSArray *a = @[ @"test_abc", @"test_def" ];
NSString *search = [NSString stringWithFormat:@".*_.*%@.*", @"c"];
NSLog(@"%@", [a filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF MATCHES %@", search]]);
以上代码打印:test_abc
我有一个 NSArray
这样的:"test01_asdf","test01_efgh","test02_ghjk"
。
我需要使用 NSPredicate
包含过滤这些项目,但我必须将过滤操作范围限制为第 7 个字符之后的所有字符。
我的意思是:忘记 "testNN_" 部分,仅对其余字符串("asdf"、"efgh"、"ghjk")使用包含过滤器。
因此,如果搜索文本是 "e",它只会 return "test01_efgh" 而不是所有项目,因为它们都包含单词 "test" 中的 "e"。
我是一个接收此输入并必须给出该输出的黑匣子。
现在我有这条线:
NSPredicate *predicateFilter = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", [myfilterstring lowercaseString]];
构造另一个数组,使用 substring 将这些元素切碎,对其进行您想要的操作,并利用它的 ids 或元素编号在原始数组中使用,希望这有帮助。
鉴于你是一个块盒,只需要提供输出,我不确定你为什么要使用NSPredicate。在没有 NSPredicate 的情况下,有许多更方便的方法可以解决这个问题。
但由于 NSPredicate 可以采用任意测试块,您可以编写一个谓词来解决这个问题;您不限于内置语言:
import Foundation
func filterArray(array: [String]) -> [String] {
let predicate = NSPredicate { (value, _) -> Bool in
let string = value as! NSString
if string.length > 7 {
return string.substringFromIndex(7).containsString("e")
}
return false
}
var matches: [String] = []
for value in array {
if predicate.evaluateWithObject(value) {
matches.append(value)
}
}
return matches
}
let array = ["test01_asdf","test01_efgh","test02_ghjk"]
print(filterArray(array))
使用 MATCHES
而不是 CONTAINS
。
NSArray *a = @[ @"test_abc", @"test_def" ];
NSString *search = [NSString stringWithFormat:@".*_.*%@.*", @"c"];
NSLog(@"%@", [a filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF MATCHES %@", search]]);
以上代码打印:test_abc