2017-07-07 21 views
-3

我有字符串的简单阵列,例如以下:IOS /目标C:添加另一个变量为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]; 
} 
+0

您期望的输出类型 –

+0

它们已经按顺序排列......详细解释您的问题。 –

+0

此数组正在用作表的数据源。我希望让用户重新排列表格。我需要一个订单号变量来跟踪用户如何重新排列表。您在上面看到的元素,chevy,ford,toyota实际上是从textfields收集的。但是,在代码的稍后时刻,我想为订单号添加另一个变量以便于重新排序。因此,问题是,如何为数组添加新的变量/维度。请注意,它们不一定是关键值。我可以使用数组的索引来链接它们。 – user6631314

回答

1

而不是使用两个数组(按你对这个问题的编辑),这会带来两个不同步的可能性,请考虑使用一系列字典。

例如,您的阵列可能会开始时为:

NSArray *myArray = @[ @{ @"make" : @"chevy" }.mutableCopy, 
         @{ @"make" : @"ford" }.mutableCopy, 
         @{ @"make" : @"toyota" }.mutableCopy 
        ]; 

这将产生你的NSArrayNSMutableDictionary(可变)(不变) - 让您拥有一个数组的排序和可变字典的灵活性添加额外的变量。例如,要的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; 

你当然也可以使阵列本身可变如果你需要添加新的条目。接下来的阶段是用makeorderNumber属性来定义你自己的类,而不是使用字典。

HTH

+0

谢谢你的深思熟虑的答案,而其他答案则错过了问题的要点。这可能是一个更好的方法,所以我会把它推向市场。也为文明+1!谢谢。 – user6631314

2

那些应该是键值对吗?如果是的话,最好用的NSDictionary:

NSDictionary *dictionary = @{ @"1" : @"chevy", @"2" : @"ford", @"3" : @"toyota"}; 
+0

它们不是关键值对。我需要在代码的稍后时间添加第二个维度。换句话说,我想将一维数组转换为二维数组。 – user6631314

+0

不太确定你想达到什么目的。你能详细说明还是展示一个例子? –

0

创建的NSDictionary代替NSArray

NSDictionary *dictionaryOfCars = @{ @"1" : @"chevy", @"2" : @"ford", @"3" : @"toyota"}; 

您可以在词典使用访问任何项目:

id item = [dictionaryOfCars objectForKey:@"1"];// item = @"chevy" 
+0

不是键值对。我只想在代码的稍后时间添加第二个维度。否则,我会一次添加它们。 – user6631314

0

的最直接的方式来解决,这是通过记录以创建第二数组,然后循环如在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]; 
} 
相关问题