5

オブジェクトを に追加する方法を維持するにはどうすればよいNSDictionaryですか?

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

どうすればこれを行うことができますか?

どんな助けでも感謝します。

4

3 に答える 3

2

辞書は、検索を高速化するためにハッシュマップされています。その順序を修正することは許可されていません。

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

または、複雑な方法を使用する必要があります。キーを追加し続け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を参照してください。

于 2013-01-24T11:48:28.110 に答える
0

このようなもの:

static int index;
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]];
于 2013-01-24T11:51:18.080 に答える
0

次のいずれかが必要です。

  • 追加した順序でキーの配列を維持することにより、順序を個別に追跡します。
  • ディクショナリに格納するオブジェクトの属性として順序を追加します。

すべての情報を 1 か所に保持するため、2 番目の方法をお勧めします。保存しているオブジェクトが自分で定義されていない場合は、そのオブジェクトのサブクラスを作成するか、独自のオブジェクトの 1 つにカプセル化し、追加のorderメンバーを使用する必要があります。

于 2013-01-24T11:55:11.290 に答える