将结果集转换为哈希表列表的最简单方法是什么?我是Scheme的新手,宁可使用库函数而不是自己的函数。我正在使用鸡肉计划和postgres鸡蛋。谢谢!
(use postgresql)
(define conn (connect '((dbname . "thedb") (user . "foo") (password . "secret") (host . "somehost"))))
(define rs (query conn "select id, name from users"))
(row-map print rs)
;(row-map ??? rs) ;what would take the place of the ??? here that would convert the row a hashtable so I end up with a list of hashtables?
答案 0 :(得分:1)
这不起作用。 row-map用记录调用过程 作为位置参数,所以你只能以位置方式获得它们。 当然,如果你知道这些职位,你可以这样做:
(row-map* (lambda (id name)
(alist->hash-table `((id . ,id) (name . ,name))))
(query conn "SELECT id, name FROM users"))
这不会很有效,但效果还不错。我不会 建议你使用哈希表,因为它们不是很好 使用方便。我更喜欢一周中的任何一天的alists 名单;对于一小组钥匙,它们更有效率。
但还有别的:为什么要转换为哈希表?它更多 有效地遍历结果集一次并执行您的 lambda里面的计算。否则你正在转换一个完整的 结果设置为哈希表列表,然后GC将收集 结果集。据推测,你将再次遍历该列表 (为什么要建立一个清单?)。所以,不要这样做,只需把你的 处理上面lambda中的代码并保存额外的遍历。