如果我有两个如此定义的泛型列表:
type
pMyList = record
a, b: integer;
c: string;
end;
TMyList = TList<pMyList>;
var
list1, list2: TMyList;
仅当某些字段符合条件时,才有某些函数将内容从列表(es:list1)复制到其他列表(es:list2)吗?例如,我想从 list1 复制 list2 中的所有记录,其中 a 的值相同,例如 1。
结果是,在 list2 中,我拥有 list1 中 a = 1 的所有记录,排除 a 值不同于 1 的所有其他记录。
真诚地,我已经解决了这样做的问题:
for iIndex := 0 to Pred(list1.Count) do
if list1[iIndex].a = myvalue then list2.Add(list1[iIndex]);
但想知道是否有更具体的方法来执行此操作,例如使用 delphi 的某些函数。
再次非常感谢。
不幸的是,因为 Delphi 缺乏使用 Collections 的 lambda 表达式,或者 Spring 框架中的通用列表可能会使源代码更长一些。另外,有些人不喜欢使用匿名方法,因为它们的语法非常麻烦。但这是一个品味问题。
对于集合,您的示例将如下所示:
list2.AddAll(list1.Where(
function(value: pMyList): Boolean
begin
Result := value.a = myvalue;
end));
请记住,提到的两个通用列表实现都是实现接口,并且大多数方法都与它们一起操作。在上面的示例中,这并不重要,因为您没有直接传递 list1。否则之后就会被释放。
通过这个例子,使用它们的好处可能并不明显,但是当您执行大量操作、过滤数据、将它们放入其他列表等等时,它会变得更容易,并且您不必编写大量额外的方法来执行这些操作运营。但正如我所说,这是一个品味问题,许多 delphi 开发人员似乎不喜欢这种语法和编写代码的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)