2015-05-05 23 views
5

Ho appena scritto questa funzione:Esiste una funzione mappa?

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; 

Questo è più o meno equivalente a Haskells map (o fmap, liftM, ecc).

Quindi mi chiedo se qualcosa del genere esiste già in Spring4D?

+1

È davvero strano che supporti 'Where' (Haskell' filter') ma non 'Select' (Haskell' map') –

+1

Solo una nota a margine - OmniThreadLibrary ha una versione parallela di un contros similare che mappa TArray a TArray (http://www.thedelphigeek.com/2015/01/parallel-map.html). – gabr

risposta

8

Quello che stai cercando si chiama TEnumerable.Select<T, TResult> in Spring.Collections (introdotto per il 1.2 non ancora pubblicato - vedi sviluppo ramo).

Il motivo per IEnumerable<T> che non ha un metodo di selezione è che i tipi di interfaccia cannot have parameterized methods.

Ricordare che l'implementazione in Spring4D è diversa dalla propria poiché utilizza lo streaming e l'esecuzione differita.

Problemi correlati