我创建一个TMultiMap实例(Spring4D Rel 1.2.2),并立即使用Ordered函数创建IEnumerable。
然后,我向multimap添加了几个项目。
当使用在multimap为空时创建的IEnumerable时,我列出了所有的项目,并对它们进行了良好的排序。当我稍后添加或删除项时,相同的IEnumerable仍然显示所有正确排序的项。
这一切都是完美的,而且运作得很好。
但这样做有效率吗?在所有插入之后得到IEnumerable更好吗?如果删除或添加了项,是否应该重新创建IEnumerable?
如果你需要它来回答,我可以编辑我的帖子,并添加一个简单的测试程序,显示我做了什么。
发布于 2021-02-11 16:21:31
判断效率是很困难的--所以我描述了它是如何在内部工作的,你可以自己决定(实际上是自己衡量):
所有IEnumerable返回方法的实现都类似于它们在.Net (也称为LINQ)中的工作方式。它们都有一些共同之处,尽管它们不会“物化”这些项,直到您真正迭代它们(或者调用任何其他需要物化的方法),但是每次迭代它们时,它们都会被重新物化。这意味着每次您从原始源获得确切的项时,如果您在某个时候将项目放入列表并调用排序--在此之后将添加到multimap中的任何项目都将从列表中缺失。在从IEnumerable返回的Ordered中,情况并非如此。
尽管如此-- Ordered方法只需要调用一次--但是每次在内部迭代这些项时,它都会从底层源(在您的例子中是multimap)获取所有项,并对它们调用TArray.Sort。
如果您正在寻找最佳的数据结构/收集,并需要帮助决定某一特定情况,我建议张贴在谷歌组,因为它不适合这样做。
https://stackoverflow.com/questions/66157934
复制相似问题