1

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

arrayOne =  { 
    "2015-11-09T00:00:00.000Z" = 1; 
    "2015-11-16T00:00:00.000Z" = 2; 
    "2015-11-23T00:00:00.000Z" = 3; 
    "2015-11-30T00:00:00.000Z" = 4; 
    "2015-12-07T00:00:00.000Z" = 5; 
    "2015-12-14T00:00:00.000Z" = 6; 
    "2015-12-21T00:00:00.000Z" = 7; 
    "2015-12-28T00:00:00.000Z" = 8; 
    "2016-01-04T00:00:00.000Z" = 9; 
    "2016-01-11T00:00:00.000Z" = 1; 
    "2016-01-18T00:00:00.000Z" = 2; 
    "2016-01-25T00:00:00.000Z" = 3; 

}

Я хотел бы создать еще один словарь со значениями, как,

arrayTWo = { 

     "November" = 10; 
     "December" = 26; 
     "January" = 15;   
    } 

Я попытался получить месячные значения дат в отдельном массиве и значения в отдельном массиве, а затем попытался получить их в nsmutabledictionary, но он не присваивает значение для дубликатов ключей a nd получил решение, подобное

arrayTWo = { 

    "November" = 4; 
    "December" = 8; 
    "January" = 3;   
} 

Я не мог найти лучшего способа, любые варианты оценены. Благодарю.

+0

Вы можете разместить код, который вам что в настоящее время работает не совсем так? – mttrb

+0

По существу, похоже, что вам нужно сделать что-то вроде 'arrayTwo [month] = arrayTwo [month] + value' вместо' arrayTwo [month] = value'. Это псевдокод, так как вам, вероятно, понадобится сделать бокс/распаковку 'NSNumber'. – mttrb

+0

Вы пытаетесь подсчитать, сколько раз появляется дата для каждого месяца, и именно так вы хотите получить конечный результат? – dokun1

ответ

1

Попробуйте это, он использует NSDateFormatter, чтобы получить название месяца с даты, оно локализовано в зависимости от текущей локали. Если ваш язык не является английским, и вам нужно, чтобы английские месячные имена раскомментировали строку, чтобы установить локаль явно.

Логика проста:

Перечислять словарь, если ключ (месяц) существует, добавьте значение, если это не создает ключ

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];  
formatter.dateFormat = @"MMMM"; 
// formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 
NSMutableDictionary *result = [NSMutableDictionary dictionary]; 
for (NSDate *key in arrayOne.allKeys) { 
    NSString *month = [formatter stringFromDate:key]; 
    if (result[month] == nil) { 
    result[month] = arrayOne[key]; 
    } else { 
    NSInteger value = [result[month] integerValue]; 
    result[month] = @(value + [arrayOne[key] integerValue]); 
    } 
} 
NSLog(@"%@", result); 
+0

Благодарим вас за блок, я получил его после нескольких преобразований форматирования даты на клавишах arrayOne, чтобы получить месяц. Еще раз спасибо, вы сэкономили много времени. –

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