Это не скомпилировано, потому что TConcatIterator<T>
может только конкатрировать два перечислимых числа, но мне нужен итератор, который объединяет перечислимые числа.Как свернуть IEnumerable от IEnumerable до одного IEnumerable?
Haskell имеет функцию concat
, что делает это:
concat [[1, 2, 3], [4,5]] => [1, 2, 3, 4, 5]
версия Delphi будет выглядеть следующим образом:
class function TForm1.Concat<T>(
const AEnumerable: IEnumerable<IEnumerable<T>>): IEnumerable<T>;
begin
// ???
end;
procedure TForm1.FormCreate(Sender: TObject);
var
InnerList1: IList<Integer>;
InnerList2: IList<Integer>;
OuterList: IList<IEnumerable<Integer>>;
Concated: IEnumerable<Integer>;
begin
InnerList1 := TCollections.CreateList<Integer>([1, 2, 3]);
InnerList2 := TCollections.CreateList<Integer>([4, 5]);
OuterList := TCollections.CreateList<IEnumerable<Integer>>([InnerList1, InnerList2]);
Concated := Concat<Integer>(OuterList);
end;
Как я могу осуществить это в spring4d?
Я только что обнаружил, что в Haskell 'SelectMany' соответствует' concatMap' или '= <<' (bind) (в [] monad), это действительно здорово. –