Реорганизовать ключи NSDictionary на основе чисел - PullRequest
0 голосов
/ 04 февраля 2012

У меня есть NSDictionary, который выглядит следующим образом:

0 =     {
        content = Test;
        date = "2012-02-02 18:36:46 +0000";
    };
    1 =     {
        content = "#### da ####";
        date = "2012-02-02 18:36:46 +0000";
    };
    2 =     {
        content = dfdffdfddfdffddf;
        date = "2012-02-03 20:30:31 +0000";
    };

Но если я удаляю второй ключ (номер 1 в примере), словарь заканчивается как:

0 =     {
    content = Test;
    date = "2012-02-02 18:36:46 +0000";
};
2 =     {
    content = dfdffdfddfdffddf;
    date = "2012-02-03 20:30:31 +0000";
};

Как я могу реорганизовать их, чтобы они поддерживали порядок (например, 0, 1, 2, 3), когда мне нужно?

1 Ответ

4 голосов
/ 04 февраля 2012

NSDictionaries неупорядочены, это означает, что вы не можете контролировать порядок ключей, и они могут меняться случайным или недокументированным образом между версиями iOS.

У вас есть несколько вариантов:

  1. Поддерживайте свой собственный, отдельный NSArray ключей и используйте его для индексирования своего словаря.

  2. Используйте этот класс OrderedDictionary, который я написал, который в основном делает это, но оборачивает все это вподкласс NSDictionary, так что вам не нужно делать никакой дополнительной работы:

    http://charcoaldesign.co.uk/source/cocoa#ordered-dictionary

  3. Если ваши ключи словаря являются числами (или если они алфавитные, или что-то еще, этолегко сортировать автоматически), вы можете просто отсортировать ключи, когда вам нужно отобразить их по порядку, используя:

    NSArray *keys = [dict allKeys];
    keys = [keys sortedArrayUsingSelector:@selector(compare:)];
    //now loop over keys array instead of directly over dictionary
    
...