Delphi 使用特定条件将内容从列表1复制到列表2

Delphi 使用特定条件将内容从列表1复制到列表2,delphi,delphi-xe2,Delphi,Delphi Xe2,如果我有两个这样定义的泛型列表: type pMyList = record a, b: integer; c: string; end; TMyList = TList<pMyList>; var list1, list2: TMyList; 但我想知道是否有更具体的方法来执行此操作,例如使用delphi的某些函数。 再次非常感谢。这个怎么样 class procedure TCollectionUtils.CopyItems<T>

如果我有两个这样定义的泛型列表:

type
  pMyList = record
    a, b: integer;
    c: string; 
  end;
  TMyList = TList<pMyList>;

var
  list1, list2: TMyList;
但我想知道是否有更具体的方法来执行此操作,例如使用delphi的某些函数。 再次非常感谢。

这个怎么样

class procedure TCollectionUtils.CopyItems<T> (List1, List2 : TList <T>; Pred : TFunc <T, Boolean>);
var
 Item : T;
begin
for Item in List1 do
  if Pred (Item) then
    List2.Add (Item);
end;
类过程TCollectionUtils.CopyItems(列表1、列表2:TList;Pred:TFunc);
变量
项目:T;
开始
对于列表1中的项目,请执行以下操作
如果是Pred(项目),则
清单2.添加(项目);
结束;
该呼叫将如下所示:

TCollectionUtils.CopyItems <pMyList> (list1, list2,
  function (Item : pMyList) : Boolean
  begin
  Result := (pMyList.a = 1);
  end);
list2.AddAll(list1.Where(
  function(value: pMyList): Boolean
  begin
    Result := value.a = myvalue;
  end));
TCollectionUtils.CopyItems(列表1、列表2、,
函数(项:pMyList):布尔值
开始
结果:=(pMyList.a=1);
(完),;

(现在这里没有Delphi)

不幸的是,Delphi缺少使用集合的lambda表达式,或者Spring框架中的泛型列表会使源代码稍微长一点。还有一些人不喜欢使用匿名方法,因为它们的语法太麻烦了。但这是品味的问题

对于集合,您的示例如下所示:

TCollectionUtils.CopyItems <pMyList> (list1, list2,
  function (Item : pMyList) : Boolean
  begin
  Result := (pMyList.a = 1);
  end);
list2.AddAll(list1.Where(
  function(value: pMyList): Boolean
  begin
    Result := value.a = myvalue;
  end));
请记住,上面提到的两个泛型列表实现都是实现接口的,并且大多数方法都使用它们进行操作。在上面的示例中,这并不重要,因为您没有直接传递list1。否则,它将被释放后


在这个例子中,使用它们的好处可能并不明显,但当您执行大量操作、过滤数据、将它们放入其他列表以及其他更多操作时,它会变得更容易,并且您不必编写大量额外的方法来执行这些操作。但正如我所说,这是一个品味问题,许多delphi开发人员似乎不喜欢这种语法和编写代码的方式。

您需要的是LINQ。在Delphi中不可用。
集合
库尽力为我们提供一些类似LINQ的功能:我曾尝试在网站上查看,但由于我无法将其应用于我的案例和我需要选择的内容,因此无法理解。能给我一些细节或一些例子,我可以在我的情况下应用它吗?再次感谢。Delphi不支持参数化例程。没错。但这可以很容易地作为类方法放入类中。对于那些因为这么一件小事而否决投票的挑剔者:我将其编辑为使用类方法。当此源代码不起作用时调用编译器挑剔者将毫无帮助。你纠正了它,删除了否决票,很简单;)嗯,我注意到我现在手头没有编译器。反正我是想帮忙的,不应该因此受到惩罚……但既然你取消了否决票,我们就好了:)顺便说一句,你那里有一个很棒的图书馆!