填充列表一次
populate a list once
我使用 datomic 和 clojure 查询数据库并获得九个元素的列表。
我想在页面上绘制这九个元素,此时保证它们是不同的元素。
但是,每次我调用该函数时,它都会重新查询,returns一个新列表,然后从新列表中获取一个元素。这是非常低效的,而且还引入了重复的可能性。
我想记住这个列表并让它成为第 n 个可索引的。欢迎提出建议和想法。
而不是调用 "the function",你应该只在你还没有调用它的时候调用它。如果调用它,请确保存储结果。不调用就看结果
memoize
(http://crossclj.info/fun/clojure.core/memoize.html) 可能会帮助您实现这一目标。根据您的缓存要求,您可能想研究它的实现并实现更合适的东西。
您可能想参考 https://github.com/clojure/core.memoize 了解服务器端更复杂的记忆需求。
任何列表都可以用 O(n) 进行第 n 个索引。对于 O(log 32 n) 性能,使用 vec
从中创建一个向量。
我使用 datomic 和 clojure 查询数据库并获得九个元素的列表。
我想在页面上绘制这九个元素,此时保证它们是不同的元素。
但是,每次我调用该函数时,它都会重新查询,returns一个新列表,然后从新列表中获取一个元素。这是非常低效的,而且还引入了重复的可能性。
我想记住这个列表并让它成为第 n 个可索引的。欢迎提出建议和想法。
而不是调用 "the function",你应该只在你还没有调用它的时候调用它。如果调用它,请确保存储结果。不调用就看结果
memoize
(http://crossclj.info/fun/clojure.core/memoize.html) 可能会帮助您实现这一目标。根据您的缓存要求,您可能想研究它的实现并实现更合适的东西。
您可能想参考 https://github.com/clojure/core.memoize 了解服务器端更复杂的记忆需求。
任何列表都可以用 O(n) 进行第 n 个索引。对于 O(log 32 n) 性能,使用 vec
从中创建一个向量。