オブジェクトを に追加する方法を維持するにはどうすればよいNSDictionary
ですか?
の値には特定の順序がないことを認識していますNSDictionary
が、私の場合setValue:forKey:
、配列のように を使用して追加する順序を保持する必要があります。
どうすればこれを行うことができますか?
どんな助けでも感謝します。
オブジェクトを に追加する方法を維持するにはどうすればよい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つのディクショナリを持つ配列を使用することもできます。
別の方法は、カスタムクラスを次のように使用することです。
@interface ....
@property(...) NSInteger index;
@property(...) NSString *key;
@property(...) id object;
// and methods to retrieve based on key, based on index etc
@end
編集2:
1年前に投稿したものと非常によく似ていることがわかりました。このOrderedDictionaryを参照してください。
このようなもの:
static int index;
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]];
次のいずれかが必要です。
すべての情報を 1 か所に保持するため、2 番目の方法をお勧めします。保存しているオブジェクトが自分で定義されていない場合は、そのオブジェクトのサブクラスを作成するか、独自のオブジェクトの 1 つにカプセル化し、追加のorderメンバーを使用する必要があります。