首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将NSString添加到数组中每个对象的末尾

将NSString添加到数组中每个对象的末尾
EN

Stack Overflow用户
提问于 2011-09-20 06:35:13
回答 6查看 355关注 0票数 0

我有一个这样的数组:

代码语言:javascript
运行
复制
self.youtubeVideos = [NSArray arrayWithObjects: 

                      @"http://example.com/index.php?number=1&keyword=", 
                      @"http://example.com/index.php?number=2&keyword=",

                      nil];

我想在数组中每个对象的末尾添加一个名为"searchKeyword“的NSString。

我该怎么做呢?

谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-09-20 06:42:24

创建一个可变数组,然后逐步执行并修改每个元素。

代码语言:javascript
运行
复制
NSMutableArray* fixedUrls = [NSMutableArray arrayWithCapacity:self.youtubeVideos.count];    

for (NSString* url in self.youtubeVideos)
{
    [fixedUrls addObject:[url stringByAppendingString:searchKeyword]];
}

self.youtubeVideos = fixedUrls;
票数 5
EN

Stack Overflow用户

发布于 2011-09-20 07:02:28

我的基于块的解决方案可能看起来有点夸张,但如果您有几个这样的需求,它可能会有所帮助:

在NSArray上创建类别:

代码语言:javascript
运行
复制
@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

并像这样使用它:

代码语言:javascript
运行
复制
#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);

甚至是

代码语言:javascript
运行
复制
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,我总是怀念列表理解,比如

代码语言:javascript
运行
复制
l = ['aa', 'ab','c','ad','dd']
l = [i+i for i in l if i.startswith('a')]

基于块的它看起来像这样:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2011-09-20 06:52:35

您可以使用以下命令将某些内容附加到现有NSString

代码语言:javascript
运行
复制
NSString* string1 = @"String1";
NSString* string2 = @"String2";
NSString* string3 = [string1 stringByAppendingString:string2];

请注意,这将始终创建一个新的NSString,因为NSStrings一旦创建就无法更改。为此,您需要一个NSMutableString。

但是,您的字符串看起来非常相似,以至于将它们存储在数组中似乎不符合逻辑。如果数组中的值之间的唯一区别是一个整数,则可以随时从模板字符串轻松地创建所有这些值。例如,这将使用templateString,并在下一行将%i替换为整数值4。

代码语言:javascript
运行
复制
NSString* templateString = @"Ich habe %i Punkte";
NSString* scoreString = [NSString stringWithFormat:templateString, 4];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7478111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档