2015-05-05 2 views
5

Я просто написал эту функцию:Есть функция карты?

class function TGenerics.Map<TFrom, TTo>(const AEnumerable: IEnumerable<TFrom>; 
    const AConverter: TConstFunc<TFrom, TTo>): IList<TTo>; 
var 
    L: IList<TTo>; 
begin 
    L := TCollections.CreateList<TTo>; 
    AEnumerable.ForEach(
    procedure(const AItem: TFrom) 
    begin 
     L.Add(AConverter(AItem)); 
    end 
); 
    Result := L; 
end; 

Это примерно эквивалентно Haskells map (или fmap, liftM и т.д.).

Так что мне интересно, что-то подобное уже существует в Spring4D?

+1

Это действительно странно, что он поддерживает 'Where' (фильтр Haskell'), но не 'Select' (Haskell' map') –

+1

Просто боковое примечание. OmniThreadLibrary имеет параллельную версию аналогичного контура, который отображает TArray в TArray (http://www.thedelphigeek.com/2015/01/parallel-map.html). – gabr

ответ

8

То, что вы ищете, называется TEnumerable.Select<T, TResult> в Spring.Collections (введено для еще не выпущенного 1.2 - см. Развитие ветки).

Причина, по которой IEnumerable<T> не имеет метода выбора, относится к типам интерфейсов cannot have parameterized methods.

Имейте в виду, что реализация Spring4D отличается от вашей, потому что она использует потоковое и отложенное выполнение.

 Смежные вопросы

  • Нет связанных вопросов^_^