0

将结果集转换为哈希表列表的最简单方法是什么?我是 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?
4

1 回答 1

1

那样不行。row-map 以记录作为位置参数调用过程,因此您只能以位置方式获取它们。当然,如果你知道位置,你可以这样做:

(row-map* (lambda (id name)
            (alist->hash-table `((id . ,id) (name . ,name))))
          (query conn "SELECT id, name FROM users"))

这不会很有效,但效果很好。无论如何,我不建议您使用哈希表,因为它们使用起来不太方便。对于短名单,我更喜欢一周中的任何一天。它们对于一小组键更有效。

但还有别的:你为什么要转换成哈希表?循环遍历一次结果集并在该 lambda 中执行计算会更有效。否则,您会将完整的结果集转换为哈希表列表,然后 GC 将收集结果集。大概您将再次遍历该列表(为什么还要建立一个列表?)。因此,不要这样做,只需将您的处理代码放在上面的 lambda 中,并为您节省额外的遍历。

于 2014-08-15T09:16:52.953 回答