2011-08-12 3 views
3

Est-ce que NSArray a la capacité de faire correspondre une chaîne dans un tableau avec la représentation la plus proche de cette chaîne dans un autre tableau?Rechercher des chaînes similaires dans NSArray

Par exemple:

NSString *search = @"apple p"; 
NSArray *array = [[NSArray alloc]initWithObjects:@"apple",@"apple pie",@"apple pies", @"apple juice", nil]; 

//Now we want to look for a similar string 
[array ?]; 

Le résultat souhaité doit être: tarte aux pommes (chaîne la plus similaire). Des idées comment cela pourrait-il être fait?

+4

Comment définissez-vous même? –

+0

Le même nombre de caractères et doit avoir la même séquence de caractères. –

+0

Devrait être similaire à la définition ci-dessus. –

Répondre

3

Vous pouvez trier le tableau en fonction de la similarité, puis extraire le dernier élément du tableau trié: la chaîne la plus similaire. En supposant que vous avez défini une méthode similarityTo: dans une catégorie sur NSString, quelque chose comme ce qui suit devrait faire l'affaire:

NSInteger compareStrings(id a, id b, void *context) { 
    int aSimilarity = [a similarityTo:(NSString *)context]; 
    int bSimilarity = [b similarityTo:(NSString *)context]; 
    return aSimilarity - bSimilarity; 
} 

// Retrieving the most similar string. 
NSString *result = [[array sortedArrayUsingFunction:compareStrings 
              context:search] lastObject]; 
+0

C'est une bonne idée. –

+0

Il ressemble à la réponse la plus proche que je veux. –

+0

Nous vous remercions de votre aide. –

Questions connexes