我创建了一个TMultiMap
实例(Spring4D Rel 1.2.2),并立即使用Ordered
函数创建了一个IEnumerable
。
然后我添加一些项目到multimap。
当使用在multimap为空时创建的IEnumerable
时,我列出了所有项目,并且它们是有序的。当我以后添加或删除项目时,相同的IEnumerable
仍然显示所有正确排序的项目。
这一切都是完美的,运行得很好。
但这是有效的吗?在所有插入之后得到IEnumerable
更好吗?如果项目被删除或添加,IEnumerable
是否应该重新创建?
如果你需要它来回答,我可以编辑我的帖子并添加一个简单的测试程序来展示我所做的。
判断效率是困难的-所以我在内部描述它是如何工作的,你可以自己决定(实际上为你自己衡量):
所有IEnumerable
返回方法的实现与。net(又名LINQ)中的工作方式相似。他们都有一些共同之处,尽管他们没有"物质化"。直到您实际迭代它们(或在它们上调用任何其他需要物化的方法),但是每次迭代它们时,它们都被重新物化。这意味着每次你从原始来源得到确切的项目不像你在某个时候把项目放入一个列表并调用sort在那个点之后被添加到multimap的任何项目都会从列表中消失。从Ordered
返回的IEnumerable
则不是这样。
话虽这么说-Ordered
方法只需要调用一次-但每次在内部迭代这些项时,它都会从底层源(在您的情况下是multimap)获取所有项并对它们调用TArray.Sort
。
如果你正在寻找最好的数据结构/集合,并需要帮助决定某些情况下,我建议张贴在谷歌组,因为它不适合SO。