2012-10-29 18 views
0

我试图让列数组像下面没有NSDictionary。 它运作良好。有没有可以获得列数组的字面值?

但我想知道如果objective-c文字支持此功能。

有没有这样的文字?

例如array [] [0]?,array [*] [0],array [?] [0]等。

NSArray *array1 = @[@"AAa", @"BBB", @"CCC"]; 
NSArray *array2 = @[@"AAb", @"BBB", @"CCC"]; 
NSArray *array3 = @[@"AAc", @"BBB", @"CCC"]; 

array = @[array1, array2, array3]; 

NSArray *result; 
result = [self getColumnArray:0]; // <- get array's [*][0] 
NSLog(@"result is : %@", result); 

result = [self getColumnArray:2]; // <- get array's [*][2] 
NSLog(@"result is : %@", result); 


- (NSArray *)getColumnArray:(NSUInteger)index { 
    NSMutableArray *resultArray = [NSMutableArray array]; 

    for (NSArray *item in array) { 
     [resultArray addObject:item[index]]; 
    } 

    return resultArray; 
} 


Excuted result : 

2012-10-29 16:00:24.550 testButton[28245:11303] result is : (
    AAa, 
    AAb, 
    AAc 
) 
2012-10-29 16:00:24.552 testButton[28245:11303] result is : (
    CCC, 
    CCC, 
    CCC 
) 

回答

0

下面的代码将工作:

NSArray *arr = @[ @[@"A", @"B"], @[@"C", @"D"]]; 
NSLog(@"%@", array[0][0]); // Logs 'A' 

因此,你可以做这样的事情,以达到你想要的效果:

// Log the 0 element of each NSArray within your primary array. 
NSArray *primaryArray = @[ @[@"A", @"1"], @[@"A", @"2"], @[@"A", @"3"] ]; 
for (int i = 0; i < array.count; i++) { 

    NSLog(@"%@", primaryArray[i][0]); // Logs "AAA" 

} 
// Or you can use a for (NSArray *arr in primaryArray) fast-enumeration loop. 

据我所知,虽然,没有语法:

NSLog(@"%@", primaryArray[*][0]); // Could log "AAA" 

有几个原因。

  1. 没有关于primaryArray多长时间的规范。
  2. 的NSLog不知道有多少%@的需要(其他用途类似的原因,例如,你会如何return primaryArray[*][0]?)
  3. 你冷凝为O(n)加工成一个单一的电话。如果有记录的API,这可以被原谅。
  4. 为了做到这一点,*运算符必须被重载(在本例中为'通配符'函数)并且Objective-C不支持运算符重载(除非在编译器内部完成,否则我认为是不'运营商超载',但'添加语言功能')。另外,*已经表示C中的指针,而?用于?:三元运算符。
  5. Objective-C已经有了一个快速枚举结构来处理这些情况,如果要添加这个语法,你会重新发明轮子。

简而言之,快速枚举循环是执行所需操作的最佳方法,并且嵌套的[i][0]框语法稍微有助于其可读性。我同意在某些情况下通配符语法非常方便(例如日志记录和枚举),但我认为要全面简洁地实现将会非常困难。另外,因为他们超载了块^,他们用完了可用的操作员!

+0

感谢您的关注。 –

相关问题