2014-10-28 74 views
4

我有一個名爲陣列的NSarray。它看起來像這樣字符串的大寫NSArray?

array = @[@"one", @"two", @"three"]; 

我想這個數組是大寫。什麼是最好的方式去做這件事。我只能想到做一個名爲mutableArray的NSMutableArray。

,做這樣的事情

for(int i = 0; i < array.lenght; i++) { 
    self.mutableArray = addObject:[array[i] capitalizedString]; 
} 

或者有另一種更好的辦法?

回答

11

您正在尋找的神奇方法確實存在。

NSArray *array = @[@"one", @"two", @"three"]; 
NSArray *capArray = [array valueForKeyPath:@"capitalizedString"]; 
0

你真正想要的是一種transform方法,它接受一個數組和一個選擇器,然後返回在每個對象上執行該選擇器的結果數組。不幸的是,這在vanilla objective-C中不存在。

你的方法一般很好,但我會小心兩點。首先,確保你創建了NSMutableArray,其容量爲NSArray,因爲這樣可以避免在向其中添加對象時的任何重新分配開銷。其次,你可能想要copy這個可變數組,所以你最終得到一個不變的NSArray作爲最終結果。

所以我會用這樣的:

- (NSArray *)capitalizeStringArray:(NSArray *)array { 
    // Initialize tempArray with size of array 
    NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:array.count]; 
    for (NSString *str in array) { 
     [tempArray addObject:[str capitalizedString]]; 
    } 
    return [tempArray copy]; // convert back to NSArray] 
} 

,如果你喜歡,你可以將此轉換爲對NSArray的類別方法,並推廣它,如果你想使用其他選擇。

0

這裏有大量的方法來處理這個問題。對於小型陣列,請選擇更容易理解的地方。

我可能會使用這樣的代碼:

- (NSMutableArray *) capitalizedArrayFromArrayOfStrings: (NSArray*) array; 
{ 
    NSMutableArray *result = [NSMutableArray arrayWithCapacity: array.count]; 
    for (NSString *string in array) 
    { 
    if ([string isKindOfClass: [NSString class]] 
     [result addObject: [string capitalizedString]; 
    } 
} 

創建具有之初的正確容量的陣列使得陣列的所有分配足夠的空間,它的未來元素,並將其保存爲分配更多的空間後來。

使用for..in快速枚舉語法比使用數組索引更有效,但對於短陣列,差異很小。代碼編寫起來也比較簡單,閱讀起來也比較簡單,所以在可能的情況下我更喜歡這種語法。

正如Alex所說,你也可以在NSArray上創建一個返回數組大小版本的類別方法,甚至可以在NSMutableArray上的一個類別中替換數組中的字符串。

-1

工程像魅力。

NSString *myString = YOUR_ARRAY.uppercaseString; 
[myNSMutableArray addObject:myString]; 
+0

該OP明確指出他們正在尋找一種解決方案來操縱一個已存在的多個字符串數組到每個字符串的數組大寫... sry – 2018-01-19 14:18:46