你實際上做的是所謂的「過濾」,而不是什麼「排序」。在斯威夫特,你可以按照如下
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