NSDictionary
にオブジェクトを追加する方法をどのように保つことができますか?NSDictionaryを注文しました
NSDictionary
に値を指定する順序は特にありませんが、私の場合は配列のようにsetValue:forKey:
を使用して追加する順序を保持する必要があります。
どうすればいいですか?
助けてください。
NSDictionary
にオブジェクトを追加する方法をどのように保つことができますか?NSDictionaryを注文しました
NSDictionary
に値を指定する順序は特にありませんが、私の場合は配列のようにsetValue:forKey:
を使用して追加する順序を保持する必要があります。
どうすればいいですか?
助けてください。
辞書は、より高速な検索のためにハッシュマップされています。注文を修正することはできません。
配列を順番に格納したい場合は、配列を使用する必要があります。
または複雑な方法を使用する必要があります。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としてカスタムクラスを使用することです。このような
何か:
static int index;
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]];
あなたがする必要があります、次のいずれかを追跡し、あなたがそれらを追加したために、キーの配列を維持することによって個別にオーダー
私は、すべての情報を1か所に保存するので、2番目の方法が好まれます。格納しているオブジェクトがユーザによって定義されていない場合は、そのオブジェクトのサブクラスを作成するか、独自のオブジェクトの1つにカプセル化し、追加のオーダーメンバを追加する必要があります。
私は配列を使うことができたことは分かっていますが、NSArrayでは許されないキーと値の両方を格納する必要があります。 –
はい私は知っていた、今私は私の答えを更新しました.. –