gpt4 book ai didi

delphi - Delphi中是否有一个可以用匿名函数调用的foreach泛型方法

转载 作者:行者123 更新时间:2023-12-03 14:39:02 27 4
gpt4 key购买 nike

我可以用 C++ 执行以下操作

for_each(vec->begin(), vec->end(), [](int n){cout << n << " " << endl;});

我想在 Delphi 中做同样/类似的事情。我问了question较早为 C++ 开发人员提供,并希望在 OOP Pascal 中生成类似的示例。问题的 lambda(匿名方法)部分实际上并不相关,但我想知道我是否可以在 Delphi XE2 中做同样的事情。

我这么问是因为我有XE,不知道是否已经添加了。谢谢。

最佳答案

可能是与 std::vector<T> 最接近的 Delphi 类似物是 TList<T> 。您可以使用 for in 迭代列表。循环:

var
Item: Integer;
List: TList<Integer>;
....
for Item in List do
Writeln(Item);

如果您有一个动态数组而不是 TList<T>那么你可以使用for in迭代元素。事实上,所有内置容器都支持 for in并且很容易添加对 for in 的支持到你自己的类(class)。

在 C++ 中,没有什么比 for in 更好的了。循环,所以习语是使用 STL 算法。这就是驱使您使用匿名函数的原因。在德尔福中使用for in语法,您可以以自然的方式表达“迭代容器的所有成员”,而无需诉诸匿名方法。

在 Delphi 2009 和 for in 中,泛型被添加到 Delphi 中Delphi 2005 中添加了循环,因此所有这些都可以在 XE 中使用。无论如何,Delphi 2009 中还添加了匿名功能。

您必须认识到,Delphi 泛型的功能不如 C++ 模板强大。虽然你谈论的是通用foreach ,您的代码不是通用的,因为它专门用于 int 。您可以用 C++ 编写代码的泛型版本,但使用 Delphi 泛型则要困难得多,因为与模板相比,泛型具有固有的局限性。尝试在 Delphi 中以通用方式编写上述代码将在您尝试调用 Writeln 时失败。 。虽然这对于 C++ 模板来说是微不足道的,但令人沮丧的是对于泛型来说却遥不可及。

更新:在评论中,您询问是否有一种巧妙的方法可以将一个容器的内容添加到另一个容器中。 AddRange 方法就是这样做的。 TList<T>.AddRange()具有三个接收以下输入参数之一的重载变体: array of T , Collection: IEnumerable<T>Collection: TEnumerable<T> 。所有标准通用容器都遵循类似的模式。

关于delphi - Delphi中是否有一个可以用匿名函数调用的foreach泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9638850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com