问题标签 [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.
delphi - 从 TObjectList 中提取对象
我有一个 OwnsObjects = true 的 TObjectList。它包含相当多的对象。现在我想从该列表中删除索引 Idx 处的对象,而不释放它。
提取方法是唯一的选择吗?
ExtractedObject := TheList.Extract(TheList[Idx]);
所有其他方法似乎都释放了该对象。我正在寻找更高效的东西,它不会每次都进行线性搜索,因为我已经知道对象的索引。有点像超载...
ExtractedObject := TheList.Extract(Idx);
...不存在的。
delphi - Delphi:泛型和 TObjectList
我创建了一个像
现在,我想要一个方法FillArray(Content);
,最好应该实现一次,即没有重载。我相信使用泛型可以做到这一点,但是我对这些野兽太缺乏经验而无法实际实现它。有人有线索吗?提前致谢!
delphi - Delphi:如何使用 TObjectList?
我需要了解如何使用通用 Delphi 2009 TObjectList
。我的非TObjectList
尝试看起来像
在这里,TList1
并TList2
继承了相同的构造函数constructor TParent.Create(Key: string; Value: string);
。但是,由于不同的专业化(例如不同的私有字段),它们不会属于同一类型。所以我必须写两个几乎相同的填充方法:
withFillArray(List: Array of TList2; Source: TSource);
是相同的,除了整个替换为TList1
with TList2
。据我了解,这可以通过使用TObjectList
和单一填充方法巧妙地规避;但是,我不知道该怎么做。有人对此有一些好的建议吗?谢谢!
delphi - 关于加入 TObjectlists
我认为我需要朝着正确的方向轻推:
我有两个相同数据类型的 Tobjectlists,我想将它们连接到一个新列表中,list1 应复制到其中(未修改),然后是 list2(反向)
delphi 是否有任何内置函数可以将两个 Tobjectlist 合并为一个?
delphi - Delphi 问题:对 Tobjectlist<> 进行排序
我想使用内置的排序方法对我的通用 tobjectlist 进行排序。
这就是我所做的:
我的比较器功能如下所示:
根据规格,它应该像这样工作。
我得到一个编译器错误 E2250这些参数不存在“排序”的重载版本(确切的措辞不同,我使用的是非英语版本的 RAD Studio)
我不知道为什么这不应该是有效的帕斯卡 - 你们有没有人对此有见识?
delphi - Delphi:存储从 TObjectList 获取的对象的正确方法
这个例子当然是简化的,但基本上我有一个触发另一个表单(frmSettings)的主表单
TSettings
是我自己以主要形式创建的对象,用于跟踪设置。
在这个新打开的表单(frmSettings)中,我获取了TMyObjectList
一个来自TObjectList
. 它充满了TMyObj
。
TListBox
然后我用该 TMyObjectList 中的值填充 a 。
编码:
只存储指针似乎不是一个好主意,因为再次触发设置表单,重新创建列表,即使用户点击“取消”,原始对象也会丢失
所以存储一个副本似乎更好,使用 assign 来获得正确的所有属性。首先检查我是否已经有一个对象。
我应该将这两行移到一个方法而不是像Settings.AssignSelectedObj(aMyObj:TMyObj)
这看起来正确还是我以错误的方式实施?更多/更少需要的东西?
我需要一些指导方针,这样我就不会因为内存泄漏和其他麻烦而感到更加安全。
除了稍微查看代码之外,真正的问题是:这是将我的 SelectedObject 存储在设置类中的正确方法吗?
delphi - 我可以为 TObjectList.IndexOf 传递一个函数,为 TObjectList.Sort 传递另一个函数吗?
总结:
TList.IndexOf(在单元Classes.pas中定义的TList)线性迭代包含的项目,并比较引用。TList.IndexOf(在Generics.Collections.pas单元中定义的TList)也线性迭代包含的项目,但使用比较器来比较项目是否相等。
TList.Sort 和 TList.Sort 都可以使用比较器。
=================================================
对于以下单元中定义的 TForceList 类型的实例,我可以使用
使用其值字段作为排序标准对其进行快速排序。但是,当我打电话时
我想使用它的 ElementZ 字段作为比较标准,即ForceEqual
函数。我想知道我怎样才能做到这一点?
PS:如果使用泛型集合,我想我可以使用
那个单位:
delphi - 调试时如何检查非泛型 TObjectList 的内容?
总结:
1. 调试时手动类型转换,正如 LachlanG 和 Ken 指出的那样。
2. 利用自 Delphi 2010 以来引入的 Debugger Visualizers 的概念。
3. 切换到泛型对应物。
==========================================
以下面的代码为例:
如果断点分别设置在 的末尾TestRegular
和TestGenerics
常规的 tobjectlist,当鼠标悬停在tmp
变量上时。我想知道是否有某种方法可以为常规 tobjectlist 实现类似的调试时功能?
arrays - 如果可以估计,TList、TObjectList 和普通数组之间的性能差异有多明显?
*总结:
请查看 Delphi 专家的知识渊博的评论。特别是对我来说,我会尝试按照 David 的建议使用旧的 TList/TObjectList,并按照 A.Bouchez 的建议使用 hard-cast 和 TObjectList.List 属性。将来重构时我会尝试 TDynArray。
==================================================== ====================
假设我有一个TAtom
在以下代码中定义的类。目前,在运行时大约有hundreds
多达TAtom 实例。在运行时,我需要对所有现有的 TAtom 实例进行简单的浮点数学运算,超过每秒次数。 thousands
stored in a dynamic array
TAtom.X/Y/Z
30
现在,我需要在运行时添加 TAtom 实例的adding
能力。看来我的选择是(1)请求一个大数组;(2)坚持动态数组,手动设置长度;(3) 切换到常规TList;(4) 切换到常规TObjectList。 inserting
deleting
除非有必要,否则我想避免(1),因为我必须更改很多函数签名。(2) 看起来也不好,因为 TList/TObjectList 似乎是为这项任务而生的。但是,因为需要使用常规 TList/TObjectList 进行类型转换,所以有人可以评论可能的性能损失吗?我的意思是,最好在我重写代码之前估计性能负担。如果性能会明显下降,我可以使用其他技术吗?
此外,我想知道使用 TList 和 TObjectList 之间是否存在性能差异?
delphi - Delphi 从 TObjectList 中删除一个对象
我有一个FileEventObjects := TObjectList.Create(True);
包含一个或多个对象的 TObject 列表 ( )。对象需要保留在列表中,直到它们被处理。(对象列表在应用程序期间存在。)
我不完全确定如何从列表中删除已处理的对象。
如果我这样做,对象会被“释放”吗FileEventObjects.Delete(i)
是否有任何有用的 TObjectLists 示例的链接?
问候,彼得。