打印球拍中的对列表
Print list of pairs in Racket
编程 Racket/base,
我正在努力完成两件事...
首先: 我正在尝试从已创建的散列映射中创建一个已排序的 对列表。我相当确定这部分有效但是...
为了检查我想打印对列表。
其次:我在引用每个列表条目的正确方法上遇到问题,我尝试使用 lambda 函数迭代列表,但我不知道我是否需要使用 car 和 cdr 来获取对参数,或者我用 ~a 为每个条目编码的方式是否可行。
'''
(define sorted-keys (sort(hash->list countMap) #:key car string<?))
(printf "The entries are: ")
(for-each
(lambda (entry) (entry (in-list sorted-keys))
(printf "~a = ~a~n (car entry) (cdr entry)))
'''
我是 Racket 的新手,我正在努力阅读有关 for/list 的文档以及如何遍历对列表。在使用 lambda 时,我应该在成对列表上使用“for-each”吗?
任何指导将不胜感激。
For-each
有这些参数:过程和迭代集合。所以,这会起作用:
(define my-hash (hash "Amy" 20 "John" 10 "Adam" 5 "Alice" 12))
(define sorted-list (sort (hash->list my-hash) string<? #:key car))
(printf "The entries are:~n")
(for-each (lambda (entry)
(printf "~a = ~a~n" (car entry) (cdr entry)))
sorted-list)
请注意 for-each
仅用于 side-effects(例如,打印),它不会 return 任何东西。您可以使用 map
迭代哪个 returns 列表:
(map (lambda (entry) (list (car entry) (+ 1 (cdr entry))))
sorted-list)
=> (("Adam" 6) ("Alice" 13) ("Amy" 21) ("John" 11))
For/list
has more options (see Racket docs for for
), 但有时你使用哪个并不重要:
> (for/list ([entry sorted-list])
(list (car entry) (+ 1 (cdr entry))))
(("Adam" 6) ("Alice" 13) ("Amy" 21) ("John" 11))
对了,还有hash-for-each
,不用转换了:
(printf "~nThe entries are:~n")
(hash-for-each my-hash
(lambda (key val)
(printf "~a = ~a~n" key val)))
哈希有自己的映射版本 hash-map
(returns 列表):
> (hash-map my-hash
(lambda (key val)
(list (string-upcase key) val)))
(("ALICE" 12) ("JOHN" 10) ("AMY" 20) ("ADAM" 5))
另请参阅 Racket docs 了解其他对哈希表有用的函数。
编程 Racket/base,
我正在努力完成两件事...
首先: 我正在尝试从已创建的散列映射中创建一个已排序的
为了检查我想打印对列表。
其次:我在引用每个列表条目的正确方法上遇到问题,我尝试使用 lambda 函数迭代列表,但我不知道我是否需要使用 car 和 cdr 来获取对参数,或者我用 ~a 为每个条目编码的方式是否可行。
'''
(define sorted-keys (sort(hash->list countMap) #:key car string<?))
(printf "The entries are: ")
(for-each
(lambda (entry) (entry (in-list sorted-keys))
(printf "~a = ~a~n (car entry) (cdr entry)))
'''
我是 Racket 的新手,我正在努力阅读有关 for/list 的文档以及如何遍历对列表。在使用 lambda 时,我应该在成对列表上使用“for-each”吗?
任何指导将不胜感激。
For-each
有这些参数:过程和迭代集合。所以,这会起作用:
(define my-hash (hash "Amy" 20 "John" 10 "Adam" 5 "Alice" 12))
(define sorted-list (sort (hash->list my-hash) string<? #:key car))
(printf "The entries are:~n")
(for-each (lambda (entry)
(printf "~a = ~a~n" (car entry) (cdr entry)))
sorted-list)
请注意 for-each
仅用于 side-effects(例如,打印),它不会 return 任何东西。您可以使用 map
迭代哪个 returns 列表:
(map (lambda (entry) (list (car entry) (+ 1 (cdr entry))))
sorted-list)
=> (("Adam" 6) ("Alice" 13) ("Amy" 21) ("John" 11))
For/list
has more options (see Racket docs for for
), 但有时你使用哪个并不重要:
> (for/list ([entry sorted-list])
(list (car entry) (+ 1 (cdr entry))))
(("Adam" 6) ("Alice" 13) ("Amy" 21) ("John" 11))
对了,还有hash-for-each
,不用转换了:
(printf "~nThe entries are:~n")
(hash-for-each my-hash
(lambda (key val)
(printf "~a = ~a~n" key val)))
哈希有自己的映射版本 hash-map
(returns 列表):
> (hash-map my-hash
(lambda (key val)
(list (string-upcase key) val)))
(("ALICE" 12) ("JOHN" 10) ("AMY" 20) ("ADAM" 5))
另请参阅 Racket docs 了解其他对哈希表有用的函数。