创建一个仅包含一个参数值的NSArray

时间:2014-05-20 12:22:41

标签: ios objective-c filter nsarray

我有一个现有的NSArray,其中包含某种类型的对象 我需要经历多次并输出一个链接其中一个对象组件的字符串。

例如:我在这个对象中有一个名为:gameId的属性 - 我需要遍历数组并输出一个字符串,其中包含一个字符串中的所有游戏id:123,453,543

我确实喜欢这样:

- (NSString *) returnStringPresentationOfAParameter:(NSString *)paramName inArray:(NSArray *)array
 {
     NSMutableArray *arrayWithParam;
     for(MyObject *object in array)
     {
         if([paramName isEqualToString: @"gameId"])
         {
           [gamesArrayWithParam object.gameId];
         }
         else if([paramName isEqualToString: @"date"])
         {
           [gamesArrayWithParam object.date];
         }
     //etc...
     }
   return [arrayWithParam componentsJoinedByString:@","];
 }

有人知道如何提高效率吗?

非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用:

[[array valueForKey:paramName] componentsJoinedByString:@","];

获取最终字符串。

编辑:确保存储在数组中的对象符合键值

答案 1 :(得分:0)

试试这个......

- (NSString *)gameIDListFromGameItems:(NSArray *)gameItems withComponentSeparator:(NSString *)separator {
    NSArray *gameIDs = [gameItems arrayByMappingWithBlock:^id(GameItem *gameItem) {
        return gameItem.gameID.stringValue;
    }];
    return [gameIDs componentsJoinedByString:separator];
}

@implementation NSArray (Additions)
- (NSArray *)arrayByMappingWithBlock:(MapBlock)block {
    NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:self.count];
    for (id obj in self) {
        id mappedObj = block(obj);
        if (!mappedObj) {
            mappedObj = [NSNull null];
        }
        [array addObject:mappedObj];
    }
    return array;
}
@end

这种方法优于键值编码的优点是编译器可以检查您实际上是否引用了实际属性。如果您更改了gameID属性的名称,则会在编译时捕获它。