我需要从我的函数返回一个序列,一个数字和一个哈希映射(所有包装在一个向量中),以便打印的返回值如下所示:
[ ([:c :a] [:e :c] [:f :e] [:d :e] [:g :f] [:b :a]) 15
{:g :c, :f :a, :c :e, :d :a, :b :a, :c :a} ]
Run Code Online (Sandbox Code Playgroud)
由于我的输入可能很大,我想从我的函数返回延迟序列/对象.对的序列(我的返回向量中的第一个对象)很容易通过在构建它的conj调用周围包装'lazy-seq'来使其变得懒惰.
哈希映射(我的返回向量中的第三个对象,可能像我的序列一样非常大)正在与序列相同的循环 - 重复块中构建(使用assoc调用).哈希映射是我的一些调用者将使用的附加信息,但如果对序列被返回为惰性,那么我想知道是否有意义发回一个潜在的巨大哈希映射与(一个有效的)lazy-seq即使我把它作为一个可选的返回值.散列映射中的条目与惰性序列中的对相关.
所以这是我的noobie问题:在发送一个懒惰的MapEntry序列代替大型HashMap时有什么意义吗?也就是说,假设用户将获取一小部分laEq-Map的MapEntrys,将它们转换为hashmap以进行查找...即将获取下一个块,依此类推.这是一种懒惰地使用关联数据的合理方法吗?在Clojure中是否有一些惯用的方法来返回/管理大型关联数据?我很欣赏任何关于我的选择的想法.在此先感谢您的帮助.
不,给他们一个懒惰的地图是不可能的.一个懒惰的MapEntries序列是可能的,但不是很有用.但是,有许多其他可能有意义的选项是相似的.
你仍然可以返回一个lazy-seq的向量(我不打算让它们成为MapEntries),但是调用者基本上没办法把它当作一个懒惰的地图.要么他们只想查找一组固定的已知密钥(在这种情况下,他们只是懒得过滤条目,从不使它成为地图)或者他们想要任意查找条目,在这种情况下他们会在查找第一个条目后,必须将所有条目保留在内存中,这样它们仍然可以查找第二个条目,因此它们也可以将整个条目转储到完全实现的映射中.
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |