Перебор массивов словарей внутри цикла for - PullRequest
0 голосов
/ 01 мая 2018

Я должен построить массив словарей в следующем формате.

[{@ "value": @ 1, @ "day": @ 2, @ "hour": @ 1}, {@ "value": @ 1, @ "day": @ 1, @ "hour ": @ 1} ....]

Сейчас я строю каждый словарь следующим образом.

 NSDictionary *dict =  @{@"value":@1, @"day":@2,@"hour":@1};
 NSDictionary *dict2 = @{@"value": @1,@"day":@1,@"hour":@1};

Затем я добавляю это в массив.

 NSArray *data = [NSArray arrayWithObjects:dict,dict2,nil];

Это хорошо для известных значений, но мне нужно изменить значения 'day' и 'hour' внутри цикла for и создать несколько словарей в моем массиве.

Сначала я создаю «день» следующим образом.

    NSInteger weekday = [[NSCalendar currentCalendar] 
    component:NSCalendarUnitWeekday fromDate:[NSDate date]];

Затем для «часа» я создал цикл for для нужных диапазонов, как показано ниже.

for (int i =start ; i <=end; i++) {

         NSDictionary *dict =  @{@"value": @1, @"day":@weekday, 
         @"hour":@i};

}

Шаг, с которым я борюсь, - это обновить «час» и «день» в пределах для цикла. Во-вторых, мне нужно создать несколько словарей в цикле добавление всех значений в один словарь не требуется. Единый дикт должно быть как

{@ "value": @ 1, @ "day": @ 2, @ "hour": @ 1}

Как только массив словарей создан, я передаю его объекту NSdata для объекта JsonNSData. Мой окончательный вывод выглядит ниже

[{ "значение": 1, "день": 0, "час": 0}, { "значение": 1, "день": 0, "час": 1}, { "значение": 1 , "день": 0, "час": 2}, { "значение": 1, "день": 0, "час": 3}, { "значение": 1, "день": 0, "час" : 4}, { "значение": 1, "день": 0, "час": 5}]

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

На самом деле вам нужен массив словарей, а не просто словарь. После обновления вопрос теперь понятен.

NSInteger weekday = [[NSCalendar currentCalendar] 
component:NSCalendarUnitWeekday fromDate:[NSDate date]];

Затем для «часа» я создал цикл for для нужных диапазонов, как показано ниже.

Здесь вам нужен массив:

NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i =start ; i <=end; i++) {
    NSDictionary *dict =  @{@"value": @1, @"day":@(weekday), @"hour":@(i)};
    [array addObject:dict];
}
NSLog(@"%@", array);
0 голосов
/ 01 мая 2018

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

@interface YourObjectName : NSObject
@property (nonatomic, strong) NSNumber *someValue;
@property (nonatomic, strong) NSString *day;
@property (nonatomic, strong) NSNumber *hour
@end

@implementation YourObjectName
@end

Затем вы можете просто перебрать массив YourObjectName и изменить / проверить значения.

for (YourObjectName* yourObject in yourObjectNameArray) {
    NSLog(@"%@", yourObject)
    NSLog(@"%@", yourObject.someValue)
    NSLog(@"%@", yourObject.day)
    NSLog(@"%@", yourObject.hour)
}

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

...