La risposta corretta è che è necessario utilizzare i tasti piegati sul caso come tasti del dizionario. Questo non equivale a convertirli in maiuscolo o minuscolo e non distruggerà la ricerca del caso medio O inserendo la complessità.
Sfortunatamente, Cocoa non sembra avere un metodo appropriato NSString
per piegare a caso una stringa, ma Core Foundation ha CFStringFold()
che è possibile utilizzare a tale scopo. Scriviamo una breve funzione per fare il lavoro necessario:
NSString *foldedString(NSString *s, NSLocale *locale)
{
CFMutableStringRef ret = CFStringCreateMutableCopy(kCFAllocatorDefault, 0,
(__bridge CFStringRef)s);
CFStringNormalize(ret, kCFStringNormalizationFormD);
CFStringFold(ret, kCFCompareCaseInsensitive, (__bridge CFLocaleRef)locale);
return (__bridge_transfer NSString *)ret;
}
Nota che il locale argomento è importante. Se si specifica NULL
, verrà visualizzata la locale di sistema corrente. Ciò andrà bene nella maggior parte dei casi, ma gli utenti turchi potrebbero essere sorpresi che "I" corrisponda a "i" anziché a "ı". Si pertanto si desidera passare [NSLocale currentLocale]
e se si sta salvando i risultati si anche si desidera salvare l'identificatore di impostazioni internazionali e creare l'impostazione internazionale da quello.
Così, quando si aggiunge al dizionario, è ora necessario fare
[dict setObject:obj forKey:foldedString(myKey, locale)];
e per cercare di nuovo
[dict objectForKey:foldedString(myKey, locale)];
Un'ultima osservazione è che si potrebbe desiderare di archiviare il caso-piegato i tasti accanto ai valori originali, quindi non devi piegarli su ogni accesso al dizionario.
Giù voti accolti con adeguata giustificazione. – andyPaul
È una domanda che ha risposto e condiviso. – andyPaul
Ma, quando faccio una domanda, vedo un'opzione Rispondi alla tua stessa domanda. Quindi, questo è quello che ho fatto. A proposito, il tuo commento sull'ottenere reputazione è piuttosto sarcastico. Vedo molti stili di codifica, puoi anche provare a rispondere come ha fatto @Ramy. Per favore, specifica il tuo blog, così posso porre queste domande laggiù. – andyPaul