NSDictionary для NSArray?
i имеет NSDictionary
, который выглядит так:
{
"Item1" = 2.4;
"Item2" = 5.5;
"Item3" = 15.6;
}
Чтобы использовать этот элемент NSDictionary
в представлении таблицы, я должен перенести его в NSArray
, я прав?
Итак, я пытаюсь:
NSDictionary *dict = [myDict objectForKey:@"items"];
for (id item in dict) {
[_myArray addObject:[dict objectForKey:item]];
}
Но _myArray остается пустым? Что я делаю неправильно?
Ответы
Ответ 1
Оставив в стороне технические проблемы с кодом, который вы опубликовали, вы спросили об этом:
Чтобы использовать эти словарные элементы в представлении таблицы, я должен перенести его в NSArray, я прав?
Ответ на который: не обязательно. В машинах UITableView
, UITableViewDataSource
или UITableViewDelegate
нет ничего, что означало бы, что ваши данные должны быть в массиве. Вам нужно будет реализовать различные методы, чтобы сообщить системе, сколько строк в вашей таблице, и какие данные отображаются в каждой строке. Многие люди считают более естественным и эффективным ответить на эти вопросы с упорядоченной структурой данных, такой как массив. Но нет необходимости, чтобы вы это делали. Если вы можете написать код для реализации этих методов со словарем, с которого вы начали, не стесняйтесь!
Ответ 2
NSArray * values = [dictionary allValues];
Ответ 3
NSArray *keys = [dictionary allKeys];
NSArray *values = [dictionary allValues];
Ответ 4
Вы можете создать массив всех объектов внутри словаря, а затем использовать его в качестве источника данных для TableView.
NSArray *aValuesArray = [yourDict allValues];
Ответ 5
Код Snippet1:
NSMutableArray *array = [[NSMutableArray alloc] init];
NSArray * values = [dictionary allValues];
[array addObject:values];
Код Snippet2: Если вы хотите добавить еще
[array addObject:value1];
[array addObject:value2];
[array addObject:value3];
И так далее
Также вы можете хранить ключевые значения словаря в массиве
NSArray *keys = [dictionary allKeys];
Ответ 6
Есть несколько вещей, которые могут произойти здесь.
В словаре есть список myDict
? Если это так, то у вас нет объекта с ключом @"items"
, а переменная dict
будет равна nil. Вам нужно выполнить итерацию через myDict
.
Еще одна вещь, которую нужно проверить, - это _myArray
- допустимый экземпляр NSMutableArray. Если он равен нулю, метод addObject:
будет терпеть неудачу.
И последнее, что нужно проверить, это то, что объекты внутри вашего словаря правильно помещены в NSNumbers (или какой-то другой не-примитивный тип).
Ответ 7
Вам просто нужно инициализировать NSMutableArray
NSMutableArray *myArray = [[NSMutableArray alloc] init];
Ответ 8
Чтобы получить все объекты в словаре, вы также можете использовать enumerateKeysAndObjectsUsingBlock:
следующим образом:
NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6];
[yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[yourArray addObject:obj];
}];
Ответ 9
Этот код фактически используется для добавления значений в dictionary
и through
данных к Array
В соответствии с Key
.
NSMutableArray *arr = [[NSMutableArray alloc]init];
NSDictionary *dicto = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Hello",@"StackOverFlow",@"Key1",@"StackExchange",@"Key2", nil];
NSLog(@"The dictonary is = %@", dicto);
arr = [dicto valueForKey:@"Key1"];
NSLog(@"The array is = %@", arr);
Ответ 10
В Swift 4:
let dict = ["Item1":2.4, "Item2": 5.4, "Item3" : 6.5]
let array = Array(dict.values)