IOS/Objective-C:将另一个变量添加到 mutableArray
IOS/Objective-C:Add another variable to a mutableArray
我有一个简单的字符串数组,如下所示:
myArray *NSArray = [NSArray arrayWithObjects: @"chevy", @"ford", @"toyota", nil];
我想向数组添加另一个维度,例如 @"1",@"2",@"3"
以跟踪顺序。
有没有简单的方法可以做到这一点?
编辑
我找到了答案 here。创建第二个数组并使用循环:
//For your 2D array
NSMutableArray *secondArray = [[NSMutableArray alloc] initWithCapacity:[homePlayersArray count]];
//populate as required
for(int i=0;i<[homePlayersArray count];i++){
NSArray *tempArray = [[NSArray alloc] initWithObjects:[homePlayersArray objectAtIndex:i],[NSNumber numberWithInt:0], nil];
[secondArray addObject:tempArray];
}
那些应该是键值对吗?如果是这样,最好使用 NSDictionary:
NSDictionary *dictionary = @{ @"1" : @"chevy", @"2" : @"ford", @"3" : @"toyota"};
创建 NSDictionary
而不是 NSArray
NSDictionary *dictionaryOfCars = @{ @"1" : @"chevy", @"2" : @"ford", @"3" : @"toyota"};
您可以使用以下方式访问字典中的任何项目:
id item = [dictionaryOfCars objectForKey:@"1"];// item = @"chevy"
与其使用两个数组(根据您对问题的编辑),这可能会导致两者彼此不同步,不如考虑使用字典数组。
例如,您的数组可能开始为:
NSArray *myArray = @[ @{ @"make" : @"chevy" }.mutableCopy,
@{ @"make" : @"ford" }.mutableCopy,
@{ @"make" : @"toyota" }.mutableCopy
];
这会为您生成 NSArray
(不可变)的 NSMutableDictionary
(可变)- 因此您拥有数组的排序和可变字典的灵活性来添加您的额外变量。例如,要将订单号 106249
添加到您可以使用的第一个条目:
NSMutableDictionary *entry = (NSMutableDictionary *)myArray[0];
entry[@"orderNumber"] = @106249;
如果您使用 Objective-C 的 轻量级泛型 功能,您可以将数组定义为:
NSArray <NSMutableDictionary *> *myArray = @[ ... ];
这会通知编译器该数组将只包含可变字典,这反过来又允许将顺序号设置为:
myArray[0][@"orderNumber"] = @106249;
无需使用任何转换。
减少错误的下一步是为键定义常量:
const NSString *kMake = @"make";
const NSString *kOrderNumber = @"orderNumber";
最终示例代码如下所示:
NSArray <NSMutableDictionary *> *myArray
= @[ @{ kMake : @"chevy" }.mutableCopy,
@{ kMake : @"ford" }.mutableCopy,
@{ kMake : @"toyota" }.mutableCopy
];
myArray[0][kOrderNumber] = @106249;
如果您需要向其中添加新条目,您当然也可以使数组本身可变。下一阶段是使用 make
和 orderNumber
属性定义您自己的 class 而不是使用字典。
HTH
解决此问题的最直接方法是创建第二个数组,然后按照 this answer 中的建议循环遍历记录。有关具有一些优势的更复杂的方式,请参阅 CRD 的答案。其他答案没有解决这个问题。
//For your 2D array
NSMutableArray *secondArray = [[NSMutableArray alloc] initWithCapacity:[homePlayersArray count]];
//populate as required
for(int i=0;i<[homePlayersArray count];i++){
NSArray *tempArray = [[NSArray alloc] initWithObjects:[homePlayersArray objectAtIndex:i],[NSNumber numberWithInt:0], nil];
[secondArray addObject:tempArray];
}
我有一个简单的字符串数组,如下所示:
myArray *NSArray = [NSArray arrayWithObjects: @"chevy", @"ford", @"toyota", nil];
我想向数组添加另一个维度,例如 @"1",@"2",@"3"
以跟踪顺序。
有没有简单的方法可以做到这一点?
编辑
我找到了答案 here。创建第二个数组并使用循环:
//For your 2D array
NSMutableArray *secondArray = [[NSMutableArray alloc] initWithCapacity:[homePlayersArray count]];
//populate as required
for(int i=0;i<[homePlayersArray count];i++){
NSArray *tempArray = [[NSArray alloc] initWithObjects:[homePlayersArray objectAtIndex:i],[NSNumber numberWithInt:0], nil];
[secondArray addObject:tempArray];
}
那些应该是键值对吗?如果是这样,最好使用 NSDictionary:
NSDictionary *dictionary = @{ @"1" : @"chevy", @"2" : @"ford", @"3" : @"toyota"};
创建 NSDictionary
而不是 NSArray
NSDictionary *dictionaryOfCars = @{ @"1" : @"chevy", @"2" : @"ford", @"3" : @"toyota"};
您可以使用以下方式访问字典中的任何项目:
id item = [dictionaryOfCars objectForKey:@"1"];// item = @"chevy"
与其使用两个数组(根据您对问题的编辑),这可能会导致两者彼此不同步,不如考虑使用字典数组。
例如,您的数组可能开始为:
NSArray *myArray = @[ @{ @"make" : @"chevy" }.mutableCopy,
@{ @"make" : @"ford" }.mutableCopy,
@{ @"make" : @"toyota" }.mutableCopy
];
这会为您生成 NSArray
(不可变)的 NSMutableDictionary
(可变)- 因此您拥有数组的排序和可变字典的灵活性来添加您的额外变量。例如,要将订单号 106249
添加到您可以使用的第一个条目:
NSMutableDictionary *entry = (NSMutableDictionary *)myArray[0];
entry[@"orderNumber"] = @106249;
如果您使用 Objective-C 的 轻量级泛型 功能,您可以将数组定义为:
NSArray <NSMutableDictionary *> *myArray = @[ ... ];
这会通知编译器该数组将只包含可变字典,这反过来又允许将顺序号设置为:
myArray[0][@"orderNumber"] = @106249;
无需使用任何转换。
减少错误的下一步是为键定义常量:
const NSString *kMake = @"make";
const NSString *kOrderNumber = @"orderNumber";
最终示例代码如下所示:
NSArray <NSMutableDictionary *> *myArray
= @[ @{ kMake : @"chevy" }.mutableCopy,
@{ kMake : @"ford" }.mutableCopy,
@{ kMake : @"toyota" }.mutableCopy
];
myArray[0][kOrderNumber] = @106249;
如果您需要向其中添加新条目,您当然也可以使数组本身可变。下一阶段是使用 make
和 orderNumber
属性定义您自己的 class 而不是使用字典。
HTH
解决此问题的最直接方法是创建第二个数组,然后按照 this answer 中的建议循环遍历记录。有关具有一些优势的更复杂的方式,请参阅 CRD 的答案。其他答案没有解决这个问题。
//For your 2D array
NSMutableArray *secondArray = [[NSMutableArray alloc] initWithCapacity:[homePlayersArray count]];
//populate as required
for(int i=0;i<[homePlayersArray count];i++){
NSArray *tempArray = [[NSArray alloc] initWithObjects:[homePlayersArray objectAtIndex:i],[NSNumber numberWithInt:0], nil];
[secondArray addObject:tempArray];
}