私は10個のキーでNSMutableDictionaryを作成しました.NSMutableDictionaryに追加されたのと同じ順序でNSMutableDictionaryキーにアクセスしたいと思います( SetValue:* forKey:* を使用);
どうすればそれを達成できますか?
私は10個のキーでNSMutableDictionaryを作成しました.NSMutableDictionaryに追加されたのと同じ順序でNSMutableDictionaryキーにアクセスしたいと思います( SetValue:* forKey:* を使用);
どうすればそれを達成できますか?
絶対に辞書コンテナーを使用する必要がある場合は、キーと値のペアを追加する順序で並べ替えることができるキーを使用する必要があります。したがって、辞書を作成するときは、自動インクリメント整数などのキーを使用します。次に、(整数) キーでソートし、それらのキーに関連付けられた値を取得できます。
ただし、それをすべて行う場合は、を使用してNSMutableArray
値を配列に直接追加することもできます。はるかに高速になり、必要なコードが少なくなります。オブジェクトを順番に取得するだけです。
for (id obj in myArray) { /* do stuff with obj... */ }
NSMutableDictionary
それはできません。たとえば Matt Gallaghers を見てくださいOrderedDictionary
。
実際には、順序どおりに参照配列を持っているのに、なぜもう1つの配列に追加する必要があるのでしょうか。このアプローチは良くないと思います。私の意見を考慮してください。
@GenralMike の答えは簡単に機能しますが、次のように不要なコードを除外することで最適化できます。
1) 追加された順序で辞書キーへの参照を保持する配列を保持します。
NSMutableArray *referenceArray = [[NSMutableArray alloc] init];
NSMutableDictionary *yourDictionary = [[ NSMutableDictionary alloc] init];
for (id object in someArray) {
[yourDictionary setObject:object forKey:someKey];
[referenceArray addObject:someKey]; // add key to reference array
}
2)「referenceArray」はすべてのキーを順番に保持するようになったため、最初に辞書に追加されたときと同じ順序でオブジェクトを辞書から取得できます。
for (NSString *key in referenceArray){
//get object from dictionary in order
id object = [yourDictionary objectForKey:key];
}