将键和值的并行列表添加到Racket中的哈希表中?

时间:2016-10-10 17:59:54

标签: hashtable racket

我有一个键列表和一个我想要添加到哈希表的值列表。到目前为止我得到的最好的是:

(apply hash-set*! table (flatten (map list keys values)))

但这会使很多嵌套列表变得扁平化。

有没有一种简单的方法可以在不创建嵌套列表的情况下执行此操作?

3 个答案:

答案 0 :(得分:1)

除非你的名单长达数万,否则无关紧要,但以懒惰的名义,这就是我要做的事情:

(require srfi/26) ; cut

(for-each (cut hash-set! table <> <>) keys vals)

同样没有SRFI-26

(for-each (λ (k v) (hash-set! table k v)) keys vals)

答案 1 :(得分:1)

我想我会这样写:

#lang racket

(define keys '(a b c))
(define values '(1 2 3))
(define table (hash 'p 34 'c 9))

(for/fold ([ht table])
          ([k (in-list keys)]
           [v (in-list values)])
  (hash-set ht k v))

......不需要额外的工作。

答案 2 :(得分:1)

最简单的'for'循环可以在这里使用:

(for ([k keys]
      [v vals])
  (hash-set! table k v))