Существует ли алгоритм Objective-C, такой как `transform` из C ++ STL?

Моя цель - получить массив, содержащий все имена файлов определенного расширения, но без расширения.

Там есть элегантное решение для получения всех имен файлов определенного расширения с использованием фильтра предикатов и инструкций о том, как разделить путь на имя файла и расширение , но чтобы объединить их, мне пришлось бы написать цикл (не страшно , но тоже не изящно).

Есть ли способ с Objective-C (может быть похож на механизм предикатов), чтобы применить некоторую функцию к каждому элементу массива и поместить результаты во второй массив, например, алгоритм transform из C ++ STL делает?

Что я хотел бы написать:

// let's pretend 'anArray' was filled by querying the filesystem and not hardcoded
NSArray* anArray = [[NSArray alloc] initWithObjects:@"one.ext", @"two.ext", nil];

// that's what I liked to write (pseudo code)
NSArray* transformed = [anArray transform: stringByDeletingPathExtension];

// Yuji's answer below proposes this (which may be as close as you can get
// to my wish with Objective C)
NSArray* transformed = [anArray my_arrayByApplyingBlock:^(id x){
                           return [x stringByDeletingPathExtension];
                       }];

9
задан Community 23 May 2017 в 11:44
поделиться