Idiom #57 Filter list
Create list y containing items from list x satisfying predicate p. Respect original ordering. Don't modify x in-place.
function Filter(vv:integer):boolean; begin result := vv mod 2= 0; end; type TFilter=function(v:integer):boolean; function FilteredArray(const x:TBoundArray;p:TFilter):TBoundArray; var Idx: Integer; v : Integer; begin setlength(result,high(x)+1); Idx := 0; for v in x do if p(v) then begin result[Idx] := v; inc(Idx); end; setlength(result,Idx); end; [...] y := FilteredArray(x,@Filter);