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。
我创建了一个 TMultiMap
实例(Spring4D Rel 1.2.2)并立即使用 Ordered
函数创建了一个 IEnumerable
。
然后我向多地图添加一些项目。
当使用多图为空时创建的 IEnumerable
时,我列出了所有项目并且它们排列整齐。当我稍后添加或删除项目时,相同的 IEnumerable
仍然显示所有正确排序的项目。
这一切都很完美,效果很好。
但这有效率吗?
在所有插入之后得到 IEnumerable
是不是更好?
如果删除或添加项目,是否应该重新创建 IEnumerable
?
如果您需要它来回答,我可以编辑我的 post 并添加一个简单的测试程序来展示我所做的。
判断效率很困难 - 所以我描述了它的内部工作原理,你可以自己决定(实际上 衡量 自己):
所有 IEnumerable
返回方法的实现方式与它们在 .Net(又名 LINQ)中的工作方式类似。它们都有一些共同点,尽管在您实际迭代它们(或对它们调用任何其他需要实现的方法)之前它们不会“具体化”这些项目,但每次迭代时它们都会重新具体化。这意味着每次您从原始来源获取确切的项目时,如果您在某个时候将项目放入列表中并对其调用排序则不同 - 在该点之后添加到多重映射的任何项目都将从列表中丢失.在从 Ordered
返回的 IEnumerable
中并非如此。
也就是说 - Ordered
方法只需要调用一次 - 但每次你在内部迭代这些项目时,它都会从底层源(在你的例子中是多映射)中获取所有项目并调用 TArray.Sort
在他们身上。
如果您正在寻找最好的数据结构/集合并需要帮助来决定某个案例,我建议您在 google 组上发帖,因为它不适合 SO。