【问题标题】:Objective C - Array With NumbersObjective C - 带数字的数组
【发布时间】:2012-06-26 02:26:08
【问题描述】:

有没有比我使用的更好的方法来用数字填充数组? 我写了多少只是为了用数字填充一个数组,这样它们就可以用于循环中的计算,这太疯狂了。这在其他基于 C 的语言(如 PHP、As3 或 Java)中更容易。

NSArray *myArray = [NSArray arrayWithObjects:  
                    [NSNumber numberWithInt:1000],[NSNumber numberWithInt:237], [NSNumber numberWithInt:2673], nil];

int total = 0;
for(int i = 0; i < [myArray count]; i += 1 ){
    total += [[myArray objectAtIndex: i]intValue];
    NSLog(@"%i", total);
}

希望有更短的方法...我只想用整数填充数组...不可能那么难

【问题讨论】:

  • 这些语言都不是“基于 C 的”。
  • 对于某些你想要NSNumber 对象的东西,它们可以存储在集合中并自动编码/解码为文件/网络流等。对于其他东西,你可能需要在 C 中使用好的旧 C 整数数组,用于超快速查找和使用(例如音频处理函数中的频率表)。在 Objective-C 中你可以选择最合适的,它支持两者。

标签: objective-c arrays int


【解决方案1】:

我猜你必须使用 NSNumber 作为 NSArray。如果你想使用整数,我猜你必须使用 c 数组:

NSInteger myArray[20];

for (int i=0;i<20;i++) {
  int num=myArray[i];

  //do something
 }

NSNumber 虽然我猜这种语言的更好方法。 至少您可以进行快速枚举以稍微缩短代码:

for (NSNumber *n in myArray) {
 int num = [n intValue];

 //do something....

}

编辑:

这个问题是 3 年前提出的。已经建立了新的字面量,以便更轻松地创建 NSNumbers 或 NSArrays 等对象:

NSNumber *n = @100;

NSArray *array = @[@100,@50,@10];

【讨论】:

【解决方案2】:

循环特定整数的不错的简短替代方法:

NSArray *numbers = [@"1000,237,2673" componentsSeparatedByString:@","];
for (NSString *i in numbers) {
    [i intValue]; // Do something.
}

【讨论】:

    【解决方案3】:

    首先从一个 C 数组开始:

    NSInteger myCArray = { 1000, 237, 2673 };
    // calculate number of elements
    NSUInteger myCArrayLength = sizeof(myCArray) / sizeof(NSInteger;
    

    第二,如果你需要一个NSArray循环遍历这个数组并创建一个:

    NSMutableArray *myNSArray = [NSMutableArray arrayWithCapacity:myCArrayLength];
    for(NSUInteger ix = 0; ix < myCArrayLength; ix++)
       [myNSArray addObject:[NSNumber numberWithInteger:myCArray[ix]];
    

    如果您经常这样做,您可以将第二段代码封装为NSArray 上的一个类别。

    【讨论】:

      【解决方案4】:

      为时已晚。但您也可以执行以下操作。

      int total = 0;
      nsarray *myArray = @[@1.8,@100,@299.8]; 
      for(nsnumber *num in myArray){
       total+=num;
      }
      

      【讨论】:

      • 看起来这种语法已经包含在接受的答案中 - 再次放置它有什么价值?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多