问题标签 [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<> 中按 A 和 B 进行类 Excel 排序
我刚刚开始使用泛型,目前在对多个字段进行排序时遇到问题。
案例:
我有一个 PeopleList 作为一个TObjectList<TPerson>
,我希望能够通过一次选择一个排序字段来制作类似 Excel 的排序功能,但尽可能保持以前的排序。
编辑:必须可以在运行时更改字段排序顺序。(即,在一种情况下,用户想要排序顺序 A、B、C - 在另一种情况下,他想要 B、A、C - 在另一个 A、C、D 中)
假设我们有一个未排序的人员列表:
现在,如果我按 LastName 排序:
然后,如果我按年龄排序,我想要这个:
为此,我制作了两个比较器 - 一个 TLastNameComparer 和一个 TAgeComparer。
我现在打电话
现在我的问题是这不会产生我想要的输出,但是
其中 Smith,26 出现在 Jones,26 之前。所以它似乎没有保留以前的排序。
我知道我只能制作一个比较 LastName 和 Age 的比较器 - 但问题是,我必须为 TPerson 中存在的每个字段组合制作比较器。
是否可以使用多个 TComparers 来做我想做的事情,或者我怎样才能完成我想做的事情?
新年更新
仅供将来访问者参考,这(几乎)是我现在使用的代码。
首先,我创建了一个基类TSortCriterion<T>
和一个TSortCriteriaComparer<T>
,以便将来能够在多个类中使用它们。我已将 Criterion 和 list 分别更改为TObject
和TObjectList
,因为我发现如果 objectlist 自动处理 Criterion 的破坏会更容易。
最后,为了使用排序标准:(这只是为了示例,因为创建排序顺序的逻辑实际上取决于应用程序):
delphi - 为什么我不能通过 TObjectList到一个需要 TObjectList 的函数?
我的代码有问题,它使用泛型类型。为什么编译器不知道传递的列表 ( Result
) 是TObjectList<TItem>
( TItem
is type for T
in TItems
)?
界面:
执行:
delphi - 对象列表未检索数据
我将一些图像加载到对象列表中,然后尝试调用它们。但它不显示图像?
如果你注意到我有这个部分,看看将 iamge 加载到 zimage1 中是否有问题。
当我这样做时,它会将 bmpout 加载到 zimage1 中,这导致我认为它与我做错的对象列表有关?
delphi - Delphi Rtti:如何从 TObjectList 中获取对象
我正在使用自定义类到 xml 转换器,其中一个要求是能够流式传输TObjectList<T>
字段。
我试图调用该ToArray()
方法来获取 TObjectlist 的对象,但我得到“无效的类类型转换”,因为类型显然不匹配。
以这个类为例:
我只需要从站点 TObjectList 中获取站点对象。请记住,我使用的是 RTTI,所以我不知道 TObjectList 中的 ObjectType,所以 Typecasting 不起作用。这就是我所拥有的,但它似乎是一个死胡同(Obj 在TobjectList<TSite>
这里):
通过 RTTI 将对象从 TObjectList 中取出的任何方法对我都有好处。出于某种奇怪的原因,我在 TypInfo 中看不到 GetItem/SetItem 方法
编辑
感谢大卫,我有我的解决方案:
我愿意接受建议,也许有更多“聪明”的方法来实现这个目标......
delphi - 使用大型 TObjectList 并释放未使用的部分
我正在使用 TObjectList (Delphi 2007) 来存储大量数据——我希望有大约 30 万个元素甚至更多。但是,当创建一个列表时,它的默认大小设置为仅存储四个元素,如果尝试添加第五个元素则为八个,如果尝试添加第九个元素则为十六个,依此类推。数字可能不对,但我认为工作是正确的。这样做的问题是所有元素都必须从内存的释放部分复制到新扩展列表迁移的新内存块。我想设置一个特定的初始大小并取消分配(或撤消内存的保留,因为保留和分配不是一回事)列表已分配/保留的任何未使用空间。这可能不是很多代码,但我认为应该有一个永久的,
list - 自定义对象列表无法在运行时添加对象给出“Nullpointer Exception”
在创建一个自定义类型 objectlist 列表并在该列表中添加一些对象时,我遇到了一些问题。我有一个advertise
对象列表
从以下行开始,我的代码在插入第一个对象后出现运行时错误:
所以如果有人可以指导我......
堆栈跟踪:-
delphi - 迭代 TObjectList
我有 ObjectList 容器,我想添加一个内部迭代器(访问者模式)事实上我正在尝试确定我的列表中的重复项..
一个样本: http: //pastebin.com/pjeWq2uN
这段代码提供了我想要实现的洞察力..
我想知道 OOP 如何解决这样的问题。
提前致谢...
delphi - 无法为 TObjectList 调用 Binarysearch 函数
如果我们查看 XE2 或 XE3 的TObjectList 方法的在线帮助 ,我们会看到二进制搜索功能可用于 TObjectList。但如果我们尝试使用 XE3,它甚至无法编译。
例如,排序功能也可用,但这是编译的。
欢迎任何想法。
示例代码:
正如 David Heffernan 所建议的,这里遵循排序函数的比较器代码。
对于那些感兴趣的人,这里遵循比较器方法的代码:
delphi - 排序 TObjectList相同比较值集群中的问题
我想TObjectList<T>
使用我自己的比较器函数对下面显示的比较器函数代码进行排序。
我希望我的 ObjectList 能够在升序和降序两个方向上进行排序以实现这一点,我使用具有两个参数 S1 和 S2 的 SysUtil.CompareText 并以降序方式排序,我正好与 CompareText 结果的符号相反。我不知道是否存在另一种解决方案,如果 s1 大于 S2 则一切都很好,反之亦然,但是如果 s1 = s2 在正常情况下,列表中没有重新索引,因为列中的所有元素都是相同的,但是相反的发生 TObjectList 排序列表好像 s1 > s2 或 s1 < s2..
我的问题是如何实现支持平等和差异的比较器?
delphi - Delphi中exe和DLL之间的TobjectList
有人可以确认我无法在 exe 和用 Delphi 编写的 dll 之间交换包含 TobjectList 的指针吗?
在可执行代码中:
除了 TobjectList 之外,@TStack 的内容都很好