2010-04-16 49 views
1

有沒有辦法將數組中包含的每個NSNumber乘以10? 這是我到目前爲止有:NSArray乘以每個參數

NSMutableArray *vertex = [NSMutableArray arrayWithCapacity:3]; 

[vertex addObject:[NSNumber numberWithFloat:1.0]]; 
[vertex addObject:[NSNumber numberWithFloat:2.0]]; 
[vertex addObject:[NSNumber numberWithFloat:3.0]]; 

[vertex makeObjectsPerformSelector:@selector(doSomethingToObject:)]; 

我不知道該怎麼選擇使用要做到這一點,請大家幫忙!

回答

0

簡答題 - 沒有。

NSNumber僅爲原始值的容器。它不做任何數學工作。 makeObjectsPerformSelector方法可用於告訴數組中的每個對象執行某些操作。但是每個對象的類都必須有選擇器所用的方法。 NSNumber也不提供任何更改存儲值的方法。所以,即使您向NSNumber添加了一個類別來執行數學運算,您仍需要用新計算的數值替換數組中的舊值。

我認爲一個更好的解決方案是將一個類別方法添加到NSMutableArray來完成這項工作。它會查看內容,計算每個新值,然後用新的值替換每個陣列成員。

+0

感謝您的回覆,夥計們! @Jason:使用NSMutableArray允許我在最後附加值。我不知道如何使用基本數組來實現它。我想出的解決方案與您的解決方案類似。 \t NSMutableArray * vertex2 = [[NSMutableArray alloc] init]; \t int i = 0;對於(NSNumber * flt in vertex){ [vertex2 addObject:[NSNumber numberWithFloat:[[vertex objectAtIndex:i] floatValue] * 10]]; \t \t i ++; \t \t \t} 我需要保留原始數組。簡而言之,第一個數組是單位球體的頂點,第二個是它們的變換。 @Derek:什麼是類別方法?它更容易閱讀嗎? – nebulus 2010-04-16 03:05:27

+0

友好的Objective C手冊中的查找類別。基本上,一個類別是一種添加/附加一個類的方法,而不用擴展它的層次結構。例如,它是向NSArray添加其他方法的一種方法。然後當你需要這些方法時,你需要導入你的類別頭文件(就像導入一個類的.h文件一樣),並且你在其中定義的方法在每個NSAarry類實例上立即可用。這是在不創建擴展的情況下擴充基類的好方法。唯一的限制是你不能添加變量,只能使用方法。 – drekka 2010-04-16 07:25:39

+0

你可以在http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html上找到它們的蘋果文檔。 – drekka 2010-04-16 07:26:40

2

不容易,沒有。你將不得不遍歷整個事物,並用NSNumber的新實例替換所有這些NSNumber的實例(NSNumber本身是不可變的)。因此,例如:

for(int i = 0; i < [vertex count]; i++) 
    [vertex replaceObjectAtIndex:i withObject:[NSNumber numberWithFloat:[[vertex objectAtIndex:i] floatValue] * 10.0f]]; 

很明顯,這是很難閱讀。如果你經常操縱它們(例如,對它們進行轉換),那麼你最好使用常規的原始數組。