2010-03-03 45 views
1

我被检查出this question具有这种代码Objective-C中的可扩展集合?

- (NSArray *) percentagesRGBArray:(float[]) rgbArray 
{ 
    NSNumber *red = [NSNumber numberWithFloat:rgbArray[0]/255]; 
    NSNumber *green = [NSNumber numberWithFloat:rgbArray[1]/255]; 
    NSNumber *blue = [NSNumber numberWithFloat:rgbArray[2]/255]; 
    NSNumber *alpha = [NSNumber numberWithFloat:rgbArray[3]]; 
    return [NSArray arrayWithObjects:red, green, blue, alpha, nil]; 
} 

,我想,“太可怕了,如果您有什么超过三种颜色?”我知道,你不知道,但是如果你确实有count-1颜色和alpha?假设你有[rgbArray count](甚至可以计算真实数组的工作吗?)仅使用objective-C,你会返回一个NSArray对象的正常方式是什么?

我只是试图解决它,但我仍然没有在Objective-C中做到这一点。这是我的失败尝试:

- (NSArray *) what:(float[]) rgbArray 
{ 
    int len = sizeof(rgbArray)/sizeof(float); // made up syntax 
    NSLog(@"length is wrong dummy %d", len); 
    NSNumber *retVal[len]; 
    for (int i=0;i<(len-1);i++) { 
     NSNumber *red = [NSNumber numberWithFloat:rgbArray[0]/255]; 
     retVal[i] = red; 
     [red release]; 
    } 
    retVal[len-1] = [NSNumber numberWithFloat:rgbArray[len-1]]; 
    return [NSArray arrayWithObjects:retVal count:len]; 

} 

回答

1

嘛,就像arrayWithObjects:count:count:部分,你可以做

- (NSArray *) what:(float[]) rgbArray count:(int)len 
{ 
    NSMutableArray*result=[NSMutableArray array]; 
    for (int i=0;i<len;i++) { 
     NSNumber *red = [NSNumber numberWithFloat:rgbArray[0]/255]; 
     [result addObject:red]; 
    } 
    return result; 
} 

如果你愿意,我可以接近你写的东西,这将是

- (NSArray *) what:(float[]) rgbArray count:(int)len 
{ 
    NSNumber**retVal=malloc(len*sizeof(NSNumber*)); 
    for (int i=0;i<len;i++) { 
     NSNumber *red = [NSNumber numberWithFloat:rgbArray[0]/255]; 
     retVal[i]=red; 
    } 
    NSArray*result=[NSArray arrayWithObjects:retVal count:len]; 
    free(retVal); 
    return result; 
} 

在这一阶段,这不是一个Objective-C的问题,而是一个纯C的问题,对吧?你的问题是

  1. 如何动态地使用C分配数组和
  2. 如何从一个函数得到一个数组的大小C.

的答案是

  1. 您使用malloc
  2. 你不能这样做,所以你需要将它传递给函数。

就是这样。因此,如果您有关于如何处理C数组的问题,您应该询问C专家......除了方法声明语法之外,Objective-C没有什么特别之处。

+0

非常酷。现在我看到了你的代码,我发现我的问题缺乏精确性。如果我有任何疑问,我会测试一些这些东西,并回复评论。谢谢! – 2010-03-04 01:04:29

5

您可以使用NSMutableArray。

您可以添加&删除项目,它是NSArray的一个子类,所以它可以传递给期望NSArray的任何方法。