2009-07-03 6 views
0

Ich habe eine QHash<QString,QString>. Ich verwende den folgenden Ausdruck, um zu überprüfen, ob ein Wert in QHash::keys() vorhanden ist oder nicht.Ist die QHash :: contains-Methode Groß-und Kleinschreibung oder Case-Insensitive?

//programme 
QHash<QString,QString> samplehash; 
QString value = "somevalue"; 
if(samplehash.contains(value)) // Condition - 1 
{ 
//some code 
} 

Manchmal stimmen die obigen Bedingungen überein, manchmal nicht für die gleichen Buchstaben des anderen Falls. Ist die QHash::contains Methode Groß-und Kleinschreibung?

Antwort

4

QHash.contains() ist case sensitive wie John T erwähnt. Ohne den Code gibt es nicht viel zu entdecken. Sie können es sich vorstellen, eine == zwischen den Tasten zu tun.

Bitte vergessen Sie nicht, dass beim Zugriff auf ein nicht existierendes Element über [] ein leerer Eintrag im Hash erstellt wird, was möglicherweise Ihren Fehler verursacht. contains keinen Eintrag in der Hash einfügen, ebenso wenig wie value

2

Es wird zwischen Groß- und Kleinschreibung unterschieden. Die gängige Praxis beim Umgang mit Daten aus mehreren Quellen und beim Vergleich von Daten besteht darin, sie alle zuerst in das gleiche Format zu konvertieren, bei dem normalerweise vor dem Vergleich alles in Kleinbuchstaben geschrieben wird.

Dies ist eine gängige Praxis, insbesondere auf Websites für die Handhabung von Logins oder Benutzereingaben in Anwendungen, um die alten 'PEBKAC' Situationen zu vermeiden und es für Benutzer einfacher zu machen.

+0

Aber der Vergleich funktioniert manchmal, und manchmal nicht. Und ich weiß, die Schlüssel in QHash ändern sich nicht. Der Wertteil kann manchmal klein oder groß sein. – Ajay

+0

posten Sie bitte Ihren vollständigen Code –

0

Eine Lösung QString sein könnte und überschreiben die operator== zu tun, um den Vergleich mit Groß- und Kleinschreibung-Modus zu Unterklasse, mit QString::compare.

Aber die Lösung von John T ist definitiv besser, wenn es Ihren Einschränkungen entspricht.