将键和值的并行列表添加到 Racket 中的哈希 table?
Add parallel lists of keys and values to a hash table in Racket?
我有一个键列表和一个值列表,我想将它们添加到哈希 table。到目前为止我得到的最好的是:
(apply hash-set*! table (flatten (map list keys values)))
但这使得很多嵌套列表只是为了压扁它们。
有没有不用创建嵌套列表的简单方法?
除非你的列表有几万长,否则这真的没关系,但以懒惰的名义,我会这样做:
(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)
我想我会这样写:
#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))
...不需要额外的条件。
这里可以使用最简单的'for'
循环:
(for ([k keys]
[v vals])
(hash-set! table k v))
我有一个键列表和一个值列表,我想将它们添加到哈希 table。到目前为止我得到的最好的是:
(apply hash-set*! table (flatten (map list keys values)))
但这使得很多嵌套列表只是为了压扁它们。
有没有不用创建嵌套列表的简单方法?
除非你的列表有几万长,否则这真的没关系,但以懒惰的名义,我会这样做:
(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)
我想我会这样写:
#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))
...不需要额外的条件。
这里可以使用最简单的'for'
循环:
(for ([k keys]
[v vals])
(hash-set! table k v))