Qu'est-ce que vous êtes en train de faire est appelé « filtrage », pas « le tri. » Dans Swift, vous pouvez mettre en œuvre votre comportement souhaité comme suit
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)
qui imprimera [a b c 2, a d c 3, a s d f c]
.
L'extrait de code équivalent dans Objective-C est ci-dessous.
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);
qui imprimera ("a b c 2", "a d c 3", "a s d f c")
.
Quel est votre "résultat souhaité"? – ndmeiri
En fait, j'ai beaucoup de chaînes dans un tableau, donc je suis en train de chercher et de trier les chaînes contenant les mots, seul le texte de recherche continue me donne le tri désiré. Mais il devrait aussi trier si mon texte de recherche entré n'est pas trouvé de manière continue dans la chaîne. –
Donc, si "texte de recherche continue" donne le résultat souhaité, pourquoi ne pas l'utiliser? Pouvez-vous s'il vous plaît préciser ce que la sortie devrait être ou comment le tableau devrait être trié? Peut-être plus d'exemples aideraient, en plus d'une explication dans. – ndmeiri