我有一个这样的数组:
self.youtubeVideos = [NSArray arrayWithObjects:
@"http://example.com/index.php?number=1&keyword=",
@"http://example.com/index.php?number=2&keyword=",
nil];我想在数组中每个对象的末尾添加一个名为"searchKeyword“的NSString。
我该怎么做呢?
谢谢!
发布于 2011-09-20 06:42:24
创建一个可变数组,然后逐步执行并修改每个元素。
NSMutableArray* fixedUrls = [NSMutableArray arrayWithCapacity:self.youtubeVideos.count];
for (NSString* url in self.youtubeVideos)
{
[fixedUrls addObject:[url stringByAppendingString:searchKeyword]];
}
self.youtubeVideos = fixedUrls;发布于 2011-09-20 07:02:28
我的基于块的解决方案可能看起来有点夸张,但如果您有几个这样的需求,它可能会有所帮助:
在NSArray上创建类别:
@interface NSArray (FunctionalTools)
- (NSArray *)arrayByPerformingBlock:(id (^)(id element))performBlock;
@end
@implementation NSArray (FunctionalTools)
- (NSArray *)arrayByPerformingBlock:(id (^)(id element))performBlock
{
NSMutableArray *array = [NSMutableArray array];
for (id element in self){
[array addObject:performBlock(element)];
}
return array;
}
@end并像这样使用它:
#import "NSArray+FunctionalTools.h"
//....
self.youtubeVideos = [NSArray arrayWithObjects:
@"http://example.com/index.php?number=1&keyword=",
@"http://example.com/index.php?number=2&keyword=",
nil];
self.youtubeVideos = [youtubeVideos arrayByPerformingBlock:^id(id element) { return [element stringByAppendingString:@"KeyWord"];}];
NSLog(@"%@", youtubeVideos);甚至是
self.youtubeVideos = [[NSArray arrayWithObjects:
@"http://example.com/index.php?number=1&keyword=",
@"http://example.com/index.php?number=2&keyword=",
nil] arrayByPerformingBlock:^id(id element) { return [element stringByAppendingString:@"KeyWord"];}];我将此示例合并到我编写的sample project中,以自学基于块的技术,以便在Objective-C中使用函数式编程。来自Python,我总是怀念列表理解,比如
l = ['aa', 'ab','c','ad','dd']
l = [i+i for i in l if i.startswith('a')]基于块的它看起来像这样:
NSArray *array = [NSArray arrayWithObjects:@"aa", @"ab",@"c",@"ad",@"dd", nil];
array = [array arrayByPerformingBlock:^id(id element) { return [element stringByAppendingString:element]; }
ifElementPassesTest:^BOOL(id element) {return [element hasPrefix:@"a"];}];发布于 2011-09-20 06:52:35
您可以使用以下命令将某些内容附加到现有NSString
NSString* string1 = @"String1";
NSString* string2 = @"String2";
NSString* string3 = [string1 stringByAppendingString:string2];请注意,这将始终创建一个新的NSString,因为NSStrings一旦创建就无法更改。为此,您需要一个NSMutableString。
但是,您的字符串看起来非常相似,以至于将它们存储在数组中似乎不符合逻辑。如果数组中的值之间的唯一区别是一个整数,则可以随时从模板字符串轻松地创建所有这些值。例如,这将使用templateString,并在下一行将%i替换为整数值4。
NSString* templateString = @"Ich habe %i Punkte";
NSString* scoreString = [NSString stringWithFormat:templateString, 4];https://stackoverflow.com/questions/7478111
复制相似问题