Как отключить NSDictionary Сортировка автоматически ключа

Когда я добавляю значения в NSMutableDictionary, он автоматически устанавливает Key wise. Как я могу отключить его и организовать в соответствии с первым набором первых и вторых секунд.

NSMutableDictionary* filteredDictionary = [NSMutableDictionary dictionary];

[filteredDictionary setObject:@"abc" forKey:@"1"];
[filteredDictionary setObject:@"abc" forKey:@"3"];
[filteredDictionary setObject:@"abc" forKey:@"2"];
[filteredDictionary setObject:@"abc" forKey:@"5"];
[filteredDictionary setObject:@"abc" forKey:@"4"];

NSLog(@"%@",filteredDictionary);

current output:
{
1 = abc;
2 = abc;
3 = abc;
4 = abc;
5 = abc;    
}

but i want 
{
1 = abc;
3 = abc;
2 = abc;
5 = abc;    
4 = abc;
}

Есть ли способ отключить сортировку по ключевому слову?

Ответ 1

Вот как это сделать:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES comparator:^(id obj1, id obj2) {

    if (obj1 > obj2) {
        return (NSComparisonResult)NSOrderedDescending;
    }
    if (obj1 < obj2) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];

NSArray *sortedKeys = [[filteredDictionary allKeys] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

NSMutableDictionary *orderedDictionary = [NSMutableDictionary dictionary];

for (NSString *index in sortedKeys) {
    [orderedDictionary setObject:[filteredDictionary objectForKey:index] forKey:index];
}

filteredDictionary = orderedDictionary;

Ответ 2

NSDictionary не сортирует ваши ключи, порядок ключей в словаре не определен, так как это неупорядоченная коллекция.

Это означает, что вы не можете доверять порядку элементов, когда вы извлекаете/печатаете их, если вы не используете keysSortedByValueUsingSelector: или keysSortedByValueUsingComparator:, чтобы отсортировать их при извлечении их.

Вы также можете увидеть это в руководстве allKeys;

Возвращаемое значение
Новый массив, содержащий ключи словарей или пустой массив, если словарь не имеет записей.

Обсуждение
Порядок элементов в массиве не определен.

Невозможно сохранить ключи/значения, упорядоченные по своему желанию, в NSDictionary, поэтому, если вам нужно их заказать в том же порядке, в котором они добавлены, у вас есть в основном два варианта:

  • Добавьте их в/удалить из упорядоченного набора - например, NSArray - одновременно с добавлением их в NSDictionary и используйте эту коллекцию для упорядоченного доступа.
  • Добавьте поле к данным, которые вы добавляете в словарь, который подсчитывает для каждого добавления, затем используйте это поле с помощью keysSortedByValueUsingComparator:, чтобы заказать его при извлечении всех ключей из массива.

Ответ 3

NSDictionary не предназначен для сортировки. Вы можете отсортировать его, получив все ключи с помощью allKeys и отсортировав этот массив по своему вкусу. Затем пропустите этот массив и получите соответствующие значения.

Ответ 4

В NSDictionary вы не получите данные при вставке.
Вы можете использовать массив, если хотите получить данные в соответствии с данными, которые вы вставляете,