10

私は10個のキーでNSMutableDictionaryを作成しました.NSMutableDictionaryに追加されたのと同じ順序でNSMutableDictionaryキーにアクセスしたいと思います( SetValue:* forKey:* を使用);

どうすればそれを達成できますか?

4

5 に答える 5

9

絶対に辞書コンテナーを使用する必要がある場合は、キーと値のペアを追加する順序で並べ替えることができるキーを使用する必要があります。したがって、辞書を作成するときは、自動インクリメント整数などのキーを使用します。次に、(整数) キーでソートし、それらのキーに関連付けられた値を取得できます。

ただし、それをすべて行う場合は、を使用してNSMutableArray値を配列に直接追加することもできます。はるかに高速になり、必要なコードが少なくなります。オブジェクトを順番に取得するだけです。

for (id obj in myArray) { /* do stuff with obj... */ }
于 2010-08-02T10:42:54.663 に答える
7

NSMutableDictionaryそれはできません。たとえば Matt Gallaghers を見てくださいOrderedDictionary

于 2010-08-02T10:41:02.813 に答える
0

実際には、順序どおりに参照配列を持っているのに、なぜもう1つの配列に追加する必要があるのでしょうか。このアプローチは良くないと思います。私の意見を考慮してください。

于 2014-07-25T11:10:20.287 に答える
0

@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];
}
于 2015-10-04T06:58:57.557 に答える