2016-10-05 3 views
0

Я получаю данные из своей базы данных, и данные извлекаются с использованием цикла while.Согласование значений с одним ключом в NSMutableDictionary

success = [db executeQuery:@"SELECT * FROM apidataTwo;"]; 

while([success next]){ 

    int first = [success intForColumn:@"id"]; 
    NSString *id = [NSString stringWithFormat:@"%d",first]; 
    [_tempArray addObject:id]; 

    NSString *country_name = [success stringForColumn:@"country_name"]; 
    [_tempArray addObject:country_name]; 

    NSString *breezometer_description = [success stringForColumn:@"breezometer_description"]; 
    [_tempArray addObject:breezometer_description]; 

    NSString *country_description = [success stringForColumn:@"country_description"]; 
    [_tempArray addObject:country_description]; 

    NSString *dateString= [success stringForColumn:@"dateString"]; 
    [_dateSectionArray addObject:dateString]; 

    [_dataDictionary setObject:_tempArray forKey:dateString]; 

} 

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

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

Так что в ситуациях, подобных этому, когда мы хотим объединить значения в один и тот же ключ, тогда какой должен быть наш подход.

Словарь должен выглядеть следующим образом:

{ 
    2016-10-05" =  (
     5, 
     "United States", 
     "Fair Air Quality", 
     "Good air quality" 
); 
    "2016-10-06" =  (
     5, 
     "United States", 
     "Fair Air Quality", 
     "Good air quality" 
); 
} 
+0

'если (_dataDictionary [DateString]) {[(NSMutableArray *) _ DataDictionary [DateString] addObjects: theNotIncremetingArray]} еще {[_ DataDictionary SetObject: theNotIncremetingArray forKey: DateString];}' ? – Larme

+0

@ Larme Массив, который я вам сказал, должен быть не изменяемым? – arqam

+0

Если вы хотите «addObjects:» к нему, он должен быть изменен. Я опубликовал, что я мог понять, это ваш вопрос, потому что это неясно с «keep incrementing array». – Larme

ответ

1

После того, как вы выяснили, ключ для этой партии данных, попытайтесь извлечь объект из словаря для этого ключа. Если objectForKey: возвращает nil, тогда создайте новый изменяемый массив. Затем установите этот массив как объект словаря для этого ключа.

Каждая новая партия данных затем добавляется к массиву, а не к словарю. Вот эскиз структуры:

while(/* processing data */){ 

    // Collect this batch 
    NSArray * entry = ...; 
    // Figure out the dictionary key for the batch. 
    // (it doesn't have to be a string, this is just for example) 
    NSString * key = ...; 

    // Try to retrieve the object for that key 
    NSMutableArray * entries = _dataDictionary[key]; 

    // If the result is `nil`, the key is not in the dictionary yet. 
    if(!entries){ 

     // Create a new mutable array 
     entries = [NSMutableArray array]; 
     // Add that to the dictionary as the value for the given key 
     _dataDictionary[key] = entries; 
    } 

    // Now `entries` is a valid `NSMutableArray`, whether it already 
    // existed or was just created. Add this batch. 
    [entries addObject:entry]; 

    // Move on to the next batch. 
} 
+0

@JoshCorwell Где мы добавляем значения из массива ввода в ключ словаря. Должны ли мы добавить значения из ключа после последней строки? – arqam

+0

Вверху вы добавляете отдельные значения в 'entry'. Затем вы добавляете 'entry' в' entries'. 'entries' уже находится в словаре. –

+0

Но где вы добавили записи в словарь. Точка, в которую вы добавили, - это где значение массива записей равно null. – arqam

Смежные вопросы