Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何从关联列表中获取密钥?骗局_List_Scheme_Racket_Associative Array - Fatal编程技术网

List 如何从关联列表中获取密钥?骗局

List 如何从关联列表中获取密钥?骗局,list,scheme,racket,associative-array,List,Scheme,Racket,Associative Array,如何从关联列表中获取密钥? 即( 下面是我写的: (define(get-keys alst) (cond [(empty? alst) empty] [(number?(first(first alst)))(cons(first(first alst))(get-keys (rest alst)))] [else(get-keys (rest alst))])) 但是,当我尝试使用get key作为辅助函数时,这是非常不完善的。我真正尝试的是编写一个程序,使用两

如何从关联列表中获取密钥? 即(

下面是我写的:

(define(get-keys alst)
  (cond
    [(empty? alst) empty]
    [(number?(first(first alst)))(cons(first(first alst))(get-keys (rest alst)))]
    [else(get-keys (rest alst))]))

但是,当我尝试使用get key作为辅助函数时,这是非常不完善的。我真正尝试的是编写一个程序,使用两个关联列表,只返回不重复的键。

这里有一个非常简单的解决方案,使用内置的高阶过程(不要重新发明轮子!):

上面的过程将
第一个
过程映射到输入列表上,即:它从每个关联中获取第一个元素。如果在某个时候需要删除重复的键,则使用
删除重复的
,例如:

(define lst1 (list (list 2 "three") (list 2 "two") (list 1 "one")))
(remove-duplicates (get-keys lst1))
=> '(2 1)
或者,如果允许您使用
map
,我们总是可以从头开始编写一个过程,只使用基本操作,如下所示:

(define (get-keys alst)
  (cond
    [(empty? alst) empty]
    [else (cons (first (first alst))
                (get-keys (rest alst)))]))

这里有一个非常简单的解决方案,使用内置的高阶过程(不要重新发明轮子!):

上面的过程将
第一个
过程映射到输入列表上,即:它从每个关联中获取第一个元素。如果在某个时候需要删除重复的键,则使用
删除重复的
,例如:

(define lst1 (list (list 2 "three") (list 2 "two") (list 1 "one")))
(remove-duplicates (get-keys lst1))
=> '(2 1)
或者,如果允许您使用
map
,我们总是可以从头开始编写一个过程,只使用基本操作,如下所示:

(define (get-keys alst)
  (cond
    [(empty? alst) empty]
    [else (cons (first (first alst))
                (get-keys (rest alst)))]))

使用
(map car alst)
可能更好,因为关联列表通常只是成对的列表,而不是列表的列表,而且Racket的
首先只限于对列表进行操作(它对任何旧的成对都不起作用)。不过,+1,显然是正确的方法。:)谢谢你的帮助,我明白你的意思了,但是,我不允许使用mapI。我正在使用具有列表的初学者abbrevisations@dd123好的,我从头开始添加了一个实现,看看我的解决方案的结尾。如果这是您需要的,请不要忘记回答这个问题,只需单击其左侧的复选标记;)使用
(map car alst)
可能更好,因为关联列表通常只是成对的列表,而不是列表的列表,而且Racket的
第一个
仅限于对列表进行操作(它对任何旧的配对都不起作用)。尽管如此,+1,显然是正确的方法。:)谢谢你的帮助,我明白你的意思,但是我不允许使用mapI。我正在使用初学者列表abbrevisations@dd123好的,我从头开始添加了一个实现,看看我的解决方案的结尾。如果这是您需要的,请不要忘记回答这个问题,只需单击其左侧的复选标记;)