2017-10-17 15 views
0

Le titre le dit à peu près - J'essaye d'écrire un prédicat qui peut prendre une chaîne donnée, et vérifier si une autre chaîne contient au moins trois lettres que ma chaîne donnée a. Ceci est indépendant de l'ordre des caractères et des majuscules, et inclut les occurrences dupliquées d'une lettre. Un exemple d'utilisation de ce serait, si j'ai un tableau massif de trois mots de lettre, je veux être en mesure de passer une chaîne avec six caractères (ou un tableau de six, chaînes de caractères simples?) Dans ce prédicat et l'utiliser pour évaluez si l'un ou l'autre des mots de trois lettres de mon tableau comprend trois des six lettres que j'ai passées (duplicata inclus).NSPredicate évalue à true si une chaîne évaluée contient 3 caractères ou plus contenus dans une chaîne donnée

Je pensais que ce serait quelque chose le long des lignes de:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] .{3,}%@",<array of characters>]; 

Mais je sais que la syntaxe est incorrecte.

+0

Regex ne peut le faire de cette façon. Vous devriez envisager d'autres approches. –

+0

Ce n'est pas clair ("doublons inclus"). Avez-vous un échantillon avec "valide" ou non, et quand il y a des "doublons"? Sinon, si vous êtes d'accord avec l'utilisation des blocs: [NSPredicate predicateWithBlock:^BOOL (NSString * _Nullable évaluéObjet, NSDictionary * _Nonable bindings) {if ([longueur_évaluation_objet] <3) {return NO;} NSUInteger count = 0; pour (NSUInteger i = 0; i <[longueur myString]; i ++) {NSString * subString = [myString substringWithRange: NSMakeRange (i, 1)]; if ([évaluéObject rangeOfString: subString] .location! = NSNotFound) {count ++; if (count> 3) renvoie YES;}} return NO;}]; ' – Larme

Répondre

0

Pour vérifier créer le prédicat, essayez

SWIFT: 
let predicate = NSPredicate(format: "SELF contains %@", "abc")