2015-05-05 180 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(或fmapliftM,等等)。

所以我想知道这样的事情在Spring4D中是否已经存在?

+1

支持'Where(Haskell'filter')而不是'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>没有Select方法的原因是接口类型cannot have parameterized methods

请记住,Spring4D中的实现与您的实现不同,因为它使用流和延迟执行。