Получение значений в порядке их добавления с помощью NSDictionary - PullRequest
3 голосов
/ 12 января 2012

Я пытаюсь заполнить средство выбора из словаря, и у меня есть словарь

NSMutableArray* type1names = [NSMutableArray arrayWithObjects:@"--",@"AA",@"AB",@"BA",@"BB",@"BC",@"CB",@"CC",@"CD",@"DC",@"DD",@"FF",nil];
    NSMutableArray* type1points = [NSMutableArray arrayWithObjects:@"-",@"4",@"3.7",@"3.3",@"3.0",@"2.7",@"2.3",@"2.0",@"1.7",@"1.3",@"1",@"0", nil];
    NSMutableDictionary *type1  = [[NSMutableDictionary alloc] initWithObjects:type1points forKeys:type1names];

инициализируется следующим образом. Проблема возникает, когда я пытаюсь вернуть их обратно, помещая их в словарь с кодом ниже.

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    YOHAppDelegate *app = [UIApplication sharedApplication].delegate;

    NSString *key = [[app.pointsDictionary allKeys] objectAtIndex:row];
    return key;
}

Они возвращаются из неупорядоченного словаря. Не случайно, всегда в одинаковых позициях, но без какой-либо логической системы.

Есть ли способ реализовать это, или я должен использовать несколько массивов для этого?

Ответы [ 2 ]

3 голосов
/ 12 января 2012

Hot Licks сказал, NSDictionary не сохраняет заказ. Однако Мэтт Галлахер показывает, как создать OrderedDictionary путем создания подкласса NSMutableDictionary.

С другой стороны, вы должны серьезно относиться к его предупреждению. Но определенным образом он подклассов дает нам шаблон, который можно использовать без подклассов: вы можете определить класс, который содержит словарь и массив, но наследует от NSObject. Определите метод setObjectForKey:, который перенаправляет в NSDictionary и добавляет объект в массив (просто, если его нет в словаре). Добавьте метод objectForKey: для пересылки в словарь и objectAtIndex: для пересылки в массив.

2 голосов
/ 12 января 2012

NSDictionary не имеет (внешне определенный / задокументированный) порядок для своих элементов.Если вы хотите их заказать, вам нужна другая схема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...