【发布时间】:2016-08-03 11:31:54
【问题描述】:
function TSomething.Concat<T>(const E: IEnumerable<IEnumerable<T>>): IEnumerable<T>;
begin
Result := TConcatIterator<T>.Create(E) as IEnumerable<T>;
end;
这不会编译,因为TConcatIterator<T> 只能连接两个可枚举,但我需要的是一个连接可枚举的可枚举的迭代器。
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 中实现这个?
【问题讨论】:
标签: delphi ienumerable delphi-xe7 spring4d