2013-01-24 16 views
5

NSDictionaryにオブジェクトを追加する方法をどのように保つことができますか?NSDictionaryを注文しました

NSDictionaryに値を指定する順序は特にありませんが、私の場合は配列のようにsetValue:forKey:を使用して追加する順序を保持する必要があります。

どうすればいいですか?

助けてください。

答えて

2

辞書は、より高速な検索のためにハッシュマップされています。注文を修正することはできません。

配列を順番に格納したい場合は、配列を使用する必要があります。

または複雑な方法を使用する必要があります。int orderNumberを追加してください(すべてのsetObject/setValueの後にインクリメントする必要があります)。保管と検索と:

NSDictionary *dict=[NSDictionary new]; 
NSString *key=....; 
[dict setValue:@"some value" forKey:[NSString stringWithFormat:@"%d-%@",orderNumber, key]]; 

別の方法としては、インデックスごとに1つの辞書を有するアレイを使用することができます。私は一年前に投稿されたものと非常によく似見つかり

、このOrderedDictionaryを参照してください。


もう一つの方法は、

@interface .... 
    @property(...) NSInteger index; 
    @property(...) NSString *key; 
    @property(...) id object; 
    // and methods to retrieve based on key, based on index etc 
@end 

EDIT 2としてカスタムクラスを使用することです。このような

+0

私は配列を使うことができたことは分かっていますが、NSArrayでは許されないキーと値の両方を格納する必要があります。 –

+0

はい私は知っていた、今私は私の答えを更新しました.. –

0

何か:

static int index; 
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]]; 
0

あなたがする必要があります、次のいずれかを追跡し、あなたがそれらを追加したために、キーの配列を維持することによって個別にオーダー

  • ディクショナリに格納するオブジェクトの属性としてオーダーを追加します。

私は、すべての情報を1か所に保存するので、2番目の方法が好まれます。格納しているオブジェクトがユーザによって定義されていない場合は、そのオブジェクトのサブクラスを作成するか、独自のオブジェクトの1つにカプセル化し、追加のオーダーメンバを追加する必要があります。

関連する問題