问题标签 [tobjectlist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
5918 浏览

delphi - 从 TObjectList 中提取对象

我有一个 OwnsObjects = true 的 TObjectList。它包含相当多的对象。现在我想从该列表中删除索引 Idx 处的对象,而不释放它。

提取方法是唯一的选择吗?

ExtractedObject := TheList.Extract(TheList[Idx]);

所有其他方法似乎都释放了该对象。我正在寻找更高效的东西,它不会每次都进行线性搜索,因为我已经知道对象的索引。有点像超载...

ExtractedObject := TheList.Extract(Idx);

...不存在的。

0 投票
1 回答
2342 浏览

delphi - Delphi:泛型和 TObjectList

我创建了一个像

现在,我想要一个方法FillArray(Content);,最好应该实现一次,即没有重载。我相信使用泛型可以做到这一点,但是我对这些野兽太缺乏经验而无法实际实现它。有人有线索吗?提前致谢!

0 投票
3 回答
16810 浏览

delphi - Delphi:如何使用 TObjectList?

我需要了解如何使用通用 Delphi 2009 TObjectList。我的非TObjectList尝试看起来像

在这里,TList1TList2继承了相同的构造函数constructor TParent.Create(Key: string; Value: string);。但是,由于不同的专业化(例如不同的私有字段),它们不会属于同一类型。所以我必须写两个几乎相同的填充方法:

withFillArray(List: Array of TList2; Source: TSource);是相同的,除了整个替换为TList1with TList2。据我了解,这可以通过使用TObjectList和单一填充方法巧妙地规避;但是,我不知道该怎么做。有人对此有一些好的建议吗?谢谢!

0 投票
2 回答
1680 浏览

delphi - 关于加入 TObjectlists

我认为我需要朝着正确的方向轻推:

我有两个相同数据类型的 Tobjectlists,我想将它们连接到一个新列表中,list1 应复制到其中(未修改),然后是 list2(反向)

delphi 是否有任何内置函数可以将两个 Tobjectlist 合并为一个?

0 投票
3 回答
8772 浏览

delphi - Delphi 问题:对 Tobjectlist<> 进行排序

我想使用内置的排序方法对我的通用 tobjectlist 进行排序。

这就是我所做的:

我的比较器功能如下所示:

根据规格,它应该像这样工作。

我得到一个编译器错误 E2250这些参数不存在“排序”的重载版本(确切的措辞不同,我使用的是非英语版本的 RAD Studio)

我不知道为什么这不应该是有效的帕斯卡 - 你们有没有人对此有见识?

0 投票
3 回答
2331 浏览

delphi - Delphi:存储从 TObjectList 获取的对象的正确方法

这个例子当然是简化的,但基本上我有一个触发另一个表单(frmSettings)的主表单

TSettings是我自己以主要形式创建的对象,用于跟踪设置。

在这个新打开的表单(frmSettings)中,我获取了TMyObjectList一个来自TObjectList. 它充满了TMyObj

TListBox然后我用该 TMyObjectList 中的值填充 a 。

编码:

只存储指针似乎不是一个好主意,因为再次触发设置表单,重新创建列表,即使用户点击“取消”,原始对象也会丢失

所以存储一个副本似乎更好,使用 assign 来获得正确的所有属性。首先检查我是否已经有一个对象。

我应该将这两行移到一个方法而不是像Settings.AssignSelectedObj(aMyObj:TMyObj)

这看起来正确还是我以错误的方式实施?更多/更少需要的东西?

我需要一些指导方针,这样我就不会因为内存泄漏和其他麻烦而感到更加安全。

除了稍微查看代码之外,真正的问题是:这是将我的 SelectedObject 存储在设置类中的正确方法吗?

0 投票
3 回答
1602 浏览

delphi - 我可以为 TObjectList.IndexOf 传递一个函数,为 TObjectList.Sort 传递另一个函数吗?

总结:

TList.IndexOf(在单元Classes.pas中定义的TList)线性迭代包含的项目,并比较引用。TList.IndexOf(在Generics.Collections.pas单元中定义的TList)也线性迭代包含的项目,但使用比较器来比较项目是否相等。

TList.Sort 和 TList.Sort 都可以使用比较器。

=================================================

对于以下单元中定义的 TForceList 类型的实例,我可以使用

使用其值字段作为排序标准对其进行快速排序。但是,当我打电话时

我想使用它的 ElementZ 字段作为比较标准,即ForceEqual函数。我想知道我怎样才能做到这一点?

PS:如果使用泛型集合,我想我可以使用

那个单位:

0 投票
2 回答
1815 浏览

delphi - 调试时如何检查非泛型 TObjectList 的内容?

总结:
1. 调试时手动类型转换,正如 LachlanG 和 Ken 指出的那样。
2. 利用自 Delphi 2010 以来引入的 Debugger Visualizers 的概念。
3. 切换到泛型对应物。

==========================================

以下面的代码为例:

如果断点分别设置在 的末尾TestRegularTestGenerics常规的 tobjectlist,当鼠标悬停在tmp变量上时。我想知道是否有某种方法可以为常规 tobjectlist 实现类似的调试时功能?

0 投票
8 回答
4637 浏览

arrays - 如果可以估计,TList、TObjectList 和普通数组之间的性能差异有多明显?

*总结:

请查看 Delphi 专家的知识渊博的评论。特别是对我来说,我会尝试按照 David 的建议使用旧的 TList/TObjectList,并按照 A.Bouchez 的建议使用 hard-cast 和 TObjectList.List 属性。将来重构时我会尝试 TDynArray。

==================================================== ====================

假设我有一个TAtom在以下代码中定义的类。目前,在运行时大约有hundreds多达TAtom 实例。在运行时,我需要对所有现有的 TAtom 实例进行简单的浮点数学运算,超过每秒次数。 thousandsstored in a dynamic arrayTAtom.X/Y/Z30

现在,我需要在运行时添加 TAtom 实例的adding能力。看来我的选择是(1)请求一个大数组;(2)坚持动态数组,手动设置长度;(3) 切换到常规TList;(4) 切换到常规TObjectList。 insertingdeleting

除非有必要,否则我想避免(1),因为我必须更改很多函数签名。(2) 看起来也不好,因为 TList/TObjectList 似乎是为这项任务而生的。但是,因为需要使用常规 TList/TObjectList 进行类型转换,所以有人可以评论可能的性能损失吗?我的意思是,最好在我重写代码之前估计性能负担。如果性能会明显下降,我可以使用其他技术吗?

此外,我想知道使用 TList 和 TObjectList 之间是否存在性能差异?

0 投票
2 回答
13439 浏览

delphi - Delphi 从 TObjectList 中删除一个对象

我有一个FileEventObjects := TObjectList.Create(True);包含一个或多个对象的 TObject 列表 ( )。对象需要保留在列表中,直到它们被处理。(对象列表在应用程序期间存在。)

我不完全确定如何从列表中删除已处理的对象。

如果我这样做,对象会被“释放”吗FileEventObjects.Delete(i)

是否有任何有用的 TObjectLists 示例的链接?

问候,彼得。