我有一个这样的数组:
self.youtubeVideos = [NSArray arrayWithObjects:
@"http://example.com/index.php?number=1&keyword=",
@"http://example.com/index.php?number=2&keyword=",
nil];
我想在数组中的每个对象的末尾添加一个名为“searchKeyword”的NSString。
我该怎么做?
谢谢!
答案 0 :(得分:5)
创建一个可变数组,然后逐步修改每个元素。
NSMutableArray* fixedUrls = [NSMutableArray arrayWithCapacity:self.youtubeVideos.count];
for (NSString* url in self.youtubeVideos)
{
[fixedUrls addObject:[url stringByAppendingString:searchKeyword]];
}
self.youtubeVideos = fixedUrls;
答案 1 :(得分:2)
我的基于块的解决方案可能看起来有点矫枉过正,但如果你有这些要求中的一些,那么它可能会有所帮助:
在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我总是错过像
这样的List Comprehensionl = ['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"];}];
答案 2 :(得分:1)
您可以使用
将某些内容附加到现有NSStringNSString* string1 = @"String1";
NSString* string2 = @"String2";
NSString* string3 = [string1 stringByAppendingString:string2];
请注意,这将始终创建一个新的NSString,因为NSStrings一旦创建就无法更改。为此,您需要一个NSMutableString。
但是你的字符串看起来非常相似,以至于将它们存储在数组中似乎不合逻辑。如果数组中值之间的唯一差异是整数,则可以根据需要从模板String轻松创建所有这些值。例如,这将使用templateString,并在下一行中将%i替换为整数值4。
NSString* templateString = @"Ich habe %i Punkte";
NSString* scoreString = [NSString stringWithFormat:templateString, 4];
答案 3 :(得分:1)
您不必创建新阵列。您可以使用附加的字符串替换mutablearray中的对象:
for(int i=0;i<self.youtubeVideos.count;i++){
[self.youtubeVideos replaceObjectAtIndex:i
withObject:[[self.youtubeVideos objectAtIndex:i]
stringByAppendingString:searchKeyword]];
}
答案 4 :(得分:0)
youtubeVideos = [NSMutableArray arrayWithObjects:
@"http://example.com/index.php?number=1&keyword=",
@"http://example.com/index.php?number=2&keyword=",
nil];
for (NSString *s in youtubeVideos) {
s = [s stringByAppendingString:@"KEYWORD"];
// Do something with the new s here...
}
答案 5 :(得分:0)
NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"http://example.com/index.php?number=1&keyword="],[NSMutableString stringWithString:@"http://example.com/index.php?number=2&keyword="],nil];
for (NSMutableString *temp in array) {
[temp appendString:searchKeyword];
}