你实际上做的是所谓的“过滤”,而不是什么“排序”。在斯威夫特,你可以按照如下
var stringArray: [NSString] = ["a b c 2", "a d c 3", "a s d f c"]
let filterString = "a c"
stringArray.filter { (element) -> Bool in
let filterComponents = filterString.componentsSeparatedByString(" ")
for component in filterComponents {
let range = element.rangeOfString(element as String, options: .CaseInsensitiveSearch)
if range.location == NSNotFound {
return false
}
}
return true
}
print(stringArray)
,它将打印[a b c 2, a d c 3, a s d f c]
实现所需的行为。
Objective-C中的等效代码片段如下。
NSArray *stringArray = @[@"a b c 2", @"a d c 3", @"a s d f c"];
NSString *filterString = @"a c";
NSArray *filterComponents = [filterString componentsSeparatedByString:@" "];
NSMutableArray *filteredArray = [[NSMutableArray alloc] init];
for (NSString *string in stringArray) {
bool matchesFilter = YES;
for (NSString *component in filterComponents) {
NSRange range = [string rangeOfString:component options:NSCaseInsensitiveSearch];
if (range.location == NSNotFound) {
// don't include in filteredArray
matchesFilter = NO;
break;
}
}
if (matchesFilter) {
[filteredArray addObject:string];
}
}
NSLog(@"%@", filteredArray);
这将打印("a b c 2", "a d c 3", "a s d f c")
。
你的“想要的结果是什么?” – ndmeiri
其实我在数组中有很多字符串,所以我正在搜索和排序包含单词的字符串,只有连续的搜索文本正在给我期望的排序。 但它也应该排序,如果我输入的搜索文本没有以连续的方式在字符串中找到。 –
因此,如果“连续搜索文本”正在给出所需的结果,为什么不使用它?你能否澄清一下输出应该是什么样的,或者应该如何排列数组?除了解释之外,更多的例子可能会有所帮助。 – ndmeiri