2012-05-24 34 views
6

NSDictionaryのJSONレスポンスに大文字小文字を区別するケースを使用しようとしていますが、レスポンスキーのタイプが異なり、ラクダの場合もあるし、小文字の場合もあるし、このケースで感度が高いケースをチェックする機能はありますか?NSDictionaryの大文字と小文字を区別しないキー

ありがとうございました。

+4

は、あなただけのキーを変換する考えがあります辞書に追加する前にすべて小文字にしますか?その後、キーを検索するたびに変換します。 – Matt

+0

どのようにすればよいのでしょうか? – kforkarim

答えて

6

最近、私はあなたのニーズに合うかもしれない2つのクラスを共有してきました。最初に挿入されたキーを保持しながら、大文字と小文字を区別しない操作(NSDictionaryNSMutableDictionaryメソッドの名前を付けたもの)を提供します。私の場合は

https://github.com/keeshux/ios-components/tree/master/Components/Utils/KSCIDictionary

+1

私は、キーの大文字と小文字を保存し、検索アルゴリズムの 'log(n)'複雑さを保存するためにマッピング辞書を使うのが好きです。ほとんどのソリューションは、それらのいずれかを放棄します。 – Peter

3
- (NSString *)lowercaseString 

それへの追加、またはNSMutableDictionaryからの読み取り時にだけ、[キーlowercaseString]を行うと、デフォルトNSStringのメソッドです。

+0

ここではすべての答えは正しいですが、データをデシリアライズしてキーを挿入すると、小文字になり、すべてが今の魅力のように機能します。ありがとう皆様 – kforkarim

+1

便宜上、 'NS [Mutable] Dictionary'の' CaseInsensitive [Mutable] Dictionary'サブクラスを書くことができます。キーを引数とする各メソッドをオーバーライドし、 '[key lowercaseString]'を使ってsuperメソッドを呼び出します。クライアントコードは完全に読み取り可能なままです。NSMutableDictionaryの代わりに 'CaseInsensitiveMutableDictionary'を使用するだけです。 – Timo

5

NSDictionaryのキーをすべて小文字またはすべて大文字にすることをお勧めします。

たとえば、私は文字列のNSArrayを持っているとします。私はそれを使用する前に、キー名を取得し、これは姓に文字列を変更しますか、私はuppercaseString使用した場合、それはLASTNAME

またはあなたもできるだろうlowercaseStringまたはuppercaseString

NSString *itemName = @"lastName"; 
itemName = [itemName lowercaseString]; 

を使用して、それを変換することができそのように辞書に追加するときに、キーの名前を変更します。

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 
[dict setObject:objectToAdd forKey:[key uppercaseString]]; 
0

が、私は辞書メソッドやプロパティのすべてを必要としませんでした:

はそれを試してみます。大文字と小文字を区別しない添字アクセスが必要でした。私は、カスタムクラスを作った( ない NSMutableDictionaryのスーパークラス)と添字付きアクセスを許可する方法を実装し、それらの大文字小文字を区別しません作っ:

- (id) objectForKeyedSubscript: (NSString *) key { 
    NSMutableDictionary *theData = self->data; 
    return theData[[key lowercaseString]]; 
} 

- (void) setObject: (id) newValue forKeyedSubscript: (NSString *) key { 
    NSMutableDictionary *theData = self->data; 
    theData[[key lowercaseString]] = newValue; 
} 

も参照してください: http://clang.llvm.org/docs/ObjectiveCLiterals.html

関連する問題