在 for 循环中迭代字典数组

Iterating over arrays of dictionaries within a for loop

我必须按照以下格式构建字典数组。

[ { @"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];

这对于已知值来说很好,但我需要在 for 循环中更改 'day' 和 'hour' 的值,并在我的数组中创建多个字典。

首先创建 'day' 如下。

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

然后对于 'hour' 我为所需范围创建了 for 循环,如下所示。

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

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

}

我正在努力的步骤是更新 'hour' 和 'day' 循环。其次我需要在循环中创建多个字典 不需要将所有值添加到单个字典中。单一字典 应该像

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

创建字典数组后,我将其传递给 JsonNSData 对象的 NSdata 对象。我的最终输出如下所示

[{"value":1,"day":0,"hour":0},{"value":1,"day":0,"hour":1},{"value":1,"day":0,"hour":2},{"value":1,"day":0,"hour":3},{"value":1,"day":0,"hour":4},{"value":1,"day":0,"hour":5}]

在不完全理解您要尝试做什么的情况下,我相信如果您在哪里创建一个包含您尝试读取和修改的三个属性的基本对象,然后创建上述对象的数组,会更好。

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

@implementation YourObjectName
@end

然后您可以简单地遍历 'YourObjectName' 和 modify/check 值的数组。

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

或者,您可以遍历现有数组,然后遍历字典键以获取和修改值。

实际上你需要一个字典数组,而不仅仅是一个字典。更新问题后现在很清楚了。

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

然后对于 'hour' 我为所需范围创建了 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);