2009-07-03 5 views
0

私はQHash<QString,QString>を持っています。 次の式を使用して、値がQHash::keys()にあるかどうかを確認します。QHash :: containsメソッドは大文字小文字を区別するか、大文字小文字を区別しませんか?

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

時々、上記の条件は、時々ではない別のケースと同じ文字のために、一致します。 QHash::containsメソッドは大文字と小文字を区別しますか?

答えて

4

QHash.contains()は、John Tと同様に大文字と小文字が区別されます。コードなしで把握することはあまりありません。キーの間に==を実行すると想像することができます。

存在しない要素に[]でアクセスすると、ハッシュに空のエントリが作成されることがありますが、これがバグの原因になることを忘れないでください。 containsはハッシュへのエントリを挿入しません、value

2

大文字と小文字が区別されます。複数のソースからのデータを処理して比較する一般的な方法は、まずすべてを同じフォーマットに変換することです。これは、通常、比較前にすべてを小文字にすることです。

これは一般的な慣行です。特に、古い 'PEBKAC'の状況を回避してユーザーをより簡単にするために、アプリケーションでのログインやユーザー入力を処理するWebサイトではそうです。

+0

しかし、比較は時々動作し、ときどきそうではありません。そして、QHashのキーは変更されません。値の部分は、小文字または大文字にすることもできます。 – Ajay

+0

あなたの完全なコードを投稿してください –

0

一つの解決策は、QStringをサブクラス化しQString::compareを使用して、大文字と小文字を区別しないモードとの比較を行うためにoperator==を上書きすることができなかったんどちらも。

しかし、あなたの制約条件を満たす場合、John Tの解答は間違いなく良いです。

関連する問題