Ich mache eine Sprachanwendung, und ich habe eine lange Liste von Vokabeln in Bezug auf diese Sprache (Deutsch, falls jemand interessiert war). Ich habe die Funktionalität in meiner App, zwischen dem Sortieren der Tabellenansicht nach deutschen Wörtern oder nach englischen Wörtern zu wechseln.Ignorieren bestimmter Strings beim Sortieren eines Arrays
Wenn ich folgendes:
NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:type];
NSString *string = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [[string componentsSeparatedByString:@"\n"] sortedArrayUsingSelector:@selector(compare:)];
es absolut perfekt funktioniert - damit meine ich, genau wie erwartet. Was ich jedoch verbessern möchte, ist, dass es bestimmte Wörter wie Verben oder Substantive gibt, denen immer Präfixe vorausgehen, wie "zu", wie "etwas tun" oder "das" vor Substantive. Was ich also tun möchte, ist, diese irgendwie von meiner Sorte auszuschließen, weil ich ansonsten alle Verben alphabetisch unter dem Abschnitt "t" in meinem Array sortiere, was nicht sehr benutzerfreundlich ist.
Ich habe die Apple-Dokumentation über NSString und NSArray durchgesehen, da dies die compare
-Funktion ist (sofern ich mich nicht sehr irre), und ich habe keinen Weg gefunden, der für mich Sinn ergibt. Dies ist das erste Mal, dass ich irgendwelche Daten verarbeitet habe, so dass ich etwas Einfaches vermisse und deshalb würde ich mich über Hilfe freuen.
Vielen Dank
Michaeljvdw
Das sieht ziemlich genau so aus, wie ich es will, aber ich bin etwas verwirrt von dem Bit in deinem Code, wenn du replaceOccurrencesOfString sagst: @ "das" withString @ "" ... weil ich eigentlich das "das" brauche (etc) um im Array zu bleiben, muss ich es nur von der Sorte ignoriert. Adressiert dieser Code das? Danke für die Antwort übrigens, ich schätze Ihre Hilfe. – Michaeljvdw
Ja, was dieser Code tatsächlich tut, ist ein Duplikat der zu vergleichenden Zeichenketten zu erstellen, und modifiziert dann diese, um alle Artikel und Leerzeichen zu entfernen. Das heißt, im Nachhinein könnte es sinnvoller sein, den String nicht zu modifizieren, sondern stattdessen 'compare: options: range: locale:', um Unterbereiche beider Strings nur aus Performance-Gründen zu vergleichen. –