2010-03-03 95 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的任何方法。