Spring4D TMultiMap 动态维护 IEnumerable

Spring4D TMultiMap maintain IEnumerable on the fly

我创建了一个 TMultiMap 实例(Spring4D Rel 1.2.2)并立即使用 Ordered 函数创建了一个 IEnumerable

然后我向多地图添加一些项目。

当使用多图为空时创建的 IEnumerable 时,我列出了所有项目并且它们排列整齐。当我稍后添加或删除项目时,相同的 IEnumerable 仍然显示所有正确排序的项目。

这一切都很完美,效果很好。

但这有效率吗? 在所有插入之后得到 IEnumerable 是不是更好? 如果删除或添加项目,是否应该重新创建 IEnumerable

如果您需要它来回答,我可以编辑我的 post 并添加一个简单的测试程序来展示我所做的。

判断效率很困难 - 所以我描述了它的内部工作原理,你可以自己决定(实际上 衡量 自己):

所有 IEnumerable 返回方法的实现方式与它们在 .Net(又名 LINQ)中的工作方式类似。它们都有一些共同点,尽管在您实际迭代它们(或对它们调用任何其他需要实现的方法)之前它们不会“具体化”这些项目,但每次迭代时它们都会重新具体化。这意味着每次您从原始来源获取确切的项目时,如果您在某个时候将项目放入列表中并对其调用排序则不同 - 在该点之后添加到多重映射的任何项目都将从列表中丢失.在从 Ordered 返回的 IEnumerable 中并非如此。

也就是说 - Ordered 方法只需要调用一次 - 但每次你在内部迭代这些项目时,它都会从底层源(在你的例子中是多映射)中获取所有项目并调用 TArray.Sort 在他们身上。

如果您正在寻找最好的数据结构/集合并需要帮助来决定某个案例,我建议您在 google 组上发帖,因为它不适合 SO。