Ios 大写的字符串数组?

Ios 大写的字符串数组?,ios,objective-c,for-loop,capitalization,Ios,Objective C,For Loop,Capitalization,我有一个叫做数组的NSarray。看起来像这样 array = @[@"one", @"two", @"three"]; for(int i = 0; i < array.lenght; i++) { self.mutableArray = addObject:[array[i] capitalizedString]; } 我想让这个数组大写。最好的办法是什么。我只能考虑制作一个名为mutableArray的NSMutableArray 然后像这样做 array = @[@"o

我有一个叫做数组的NSarray。看起来像这样

array = @[@"one", @"two", @"three"];
for(int i = 0; i < array.lenght; i++) {
    self.mutableArray = addObject:[array[i] capitalizedString];
}
我想让这个数组大写。最好的办法是什么。我只能考虑制作一个名为mutableArray的NSMutableArray

然后像这样做

array = @[@"one", @"two", @"three"];
for(int i = 0; i < array.lenght; i++) {
    self.mutableArray = addObject:[array[i] capitalizedString];
}
for(int i=0;i

或者还有其他更好的方法吗?

您真正想要的是一种转换方法,它接受一个数组和一个选择器,然后返回对每个对象执行该选择器的结果数组。不幸的是,这在vanilla objective-C中并不存在

你的方法大体上是好的,但我会注意两点。首先,请确保使用要复制的
NSArray
的容量创建
NSMutableArray
,因为这样可以避免在向其中添加对象时的任何重新分配开销。其次,您可能希望
复制
可变数组,以便最终得到一个不可变的
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]
}
- (NSMutableArray *) capitalizedArrayFromArrayOfStrings: (NSArray*) array;
{
  NSMutableArray *result = [NSMutableArray arrayWithCapacity: array.count];
  for (NSString *string in array)
  {
    if ([string isKindOfClass: [NSString class]]
      [result addObject: [string capitalizedString];
  }
}

如果愿意,您可以将其转换为NSArray上的category方法,并根据需要将其推广到使用其他选择器。

处理此问题的方法有无数种。对于小数组,选择您认为更容易理解的

我可能会使用这样的代码:

- (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]
}
- (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..比使用数组索引更有效,但对于短数组,差异很小。代码也更易于编写和阅读,因此我更喜欢尽可能使用这种语法


正如Alex所说,您还可以在NSArray上创建一个category方法,该方法将返回数组的大写版本,或者甚至在NSMutableArray上创建一个category方法,该方法将替换数组中的字符串“就地”。

您正在寻找的神奇方法确实存在

NSArray *array = @[@"one", @"two", @"three"];
NSArray *capArray = [array valueForKeyPath:@"capitalizedString"];
工作起来很有魅力

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

你可以使用地图

let array = ["one", "two", "three"]
let upercaseArray = array.map({$0.uppercased()})

现在您有了类似于
[“一”、“二”、“三”]

的SupercaseArray,OP明确表示,他们正在寻找一种解决方案,将已经存在的多个字符串数组转换为每个大写字符串的数组……如果有人想要大写,那么使用
“uppercaseString”
而不是
“capitalizedString”