簡體   English   中英

將NSString的NSArray轉換為NSMutableString的NSArray

[英]convert NSArray of NSString(s) to NSArray of NSMutableString(s)

如何做到這一點而不必通過“ for”循環“滾動”整個給定數組?

我能想到的最好的是:

NSMutableArray *replacementArray = [NSMutableArray array];

[originalArray enumerateObjectsUsingBlock:
     ^(id obj, NSUInteger index, BOOL *stop)
     {
          [replacementArray addObject:[[obj mutableCopy] autorelease]];
     }
];

哪個或多或少只是告訴了originalArray為您構造for循環。 如果有的話,它還需要做更多的工作:

NSMutableArray *replacementArray = [NSMutableArray array];

for(id obj in originalArray)
   [replacementArray addObject:[[obj mutableCopy] autorelease]];

由於似乎沒有人同意我的評論,即這是將NSNumbers的NSArray轉換為NSStrings數組的更好方法的重復,因此再次提供相同的答案:

NSArray * arrayOfMutableStrings = [arrayOfStrings valueForKey:@"mutableCopy"];

文檔

valueForKey:
返回一個數組,該數組包含調用valueForKey:在每個數組對象上使用key的結果。

- (id)valueForKey:(NSString *)key

參量
key檢索的關鍵。

返回值
檢索到的鍵的值。

討論區
返回的數組包含每個返回nil對象的NSNull元素。

我在NSArray上編寫了一個字典方法,以便能夠編寫更簡潔的功能代碼

-(NSArray *)arrayByPerformingBlock:(id (^)(id))performBlock 
{
    NSMutableArray *array = [NSMutableArray array];
    for (id element in self)
         [array addObject:performBlock(element)];
    return [NSArray arrayWithArray:array];
}

用法:

arrayWithStrings = [arrayWithStrings arrayByPerformingBlock:^id(id element) {return [[element mutableCopy] autorelease];}];

這是由我從Python了解的列表理解啟發而來的。 我還通過測試編寫了該方法的版本。 參見我的arraytools

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM