我有一个名为阵列的NSarray。它看起来像这样
array = @[@"one", @"two", @"three"];
我希望这个数组大写。什么是最好的方法来解决这个问题。我只能想到制作一个名为mutableArray的NSMutableArray。
做这样的事情
for(int i = 0; i < array.lenght; i++) {
self.mutableArray = addObject:[array[i] capitalizedString];
}
还是有另一种更好的方法吗?
答案 0 :(得分:13)
你正在寻找的神奇方法确实存在。
NSArray *array = @[@"one", @"two", @"three"];
NSArray *capArray = [array valueForKeyPath:@"capitalizedString"];
答案 1 :(得分:0)
你真正想要的是一种转换方法,它接受一个数组和一个选择器,然后返回在每个对象上执行该选择器的结果数组。不幸的是,在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上的类别方法,并根据需要将其概括为使用其他选择器。
答案 2 :(得分: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快速枚举语法比使用数组索引更有效,但对于短数组,差异很小。代码编写起来也更简单,阅读也更简单,所以我更喜欢这种语法。
正如亚历克斯所说,你也可以在NSArray上创建一个类别方法,它将返回数组的大写版本,甚至是NSMutableArray上的一个类别,它将替换数组中的字符串&#34;就位#34;。
答案 3 :(得分:0)
SWIFT
您可以使用地图
let array = ["one", "two", "three"]
let upercaseArray = array.map({$0.uppercased()})
现在您拥有["ONE","TWO","THREE""]
之类的upercaseArray
答案 4 :(得分:-1)
像魅力一样。
ffmpeg -i city_4cif.y4m -vf "tinterlace=5" city_4cif_i.y4m