racket - 如何获取特定结构的所有实例的列表
问题描述
我试图弄清楚,如何获取特定结构的所有实例的列表让我们说:empInfo 是我的结构名称,它可能有三个以上的实例。因为实例名称是动态的。因此,我需要使用 for 循环或所有实例的任何字段值列出实例的名称。结构是否与它的实例有关,我将在哪一点得到它。
最后,我需要特定结构的所有实例的 FNAME。
(struct empInfo(FNAME LNAME IDNO PHONE EMAIL)#:mutable)
(define PersonOne(empInfo "S" "R" 13 "+44" "A@email.com"))
(define PersonTwo(empInfo "H" "I" 31 "+44" "H@email.com"))
(define PersonThree(empInfo "A" "Q" 1 "+44" "S@email.com"))
(define ilist(list (empInfo-FNAME PersonOne) (empInfo-FNAME PersonTwo) (empInfo-FNAME PersonThree)))
在交互窗口上
> ilist '("S" "H" "A")
我只是想用循环来做。
解决方案
通常,我们会map
为此使用:
(define people (list PersonOne PersonTwo PersonThree))
(map empInfo-FNAME people)
=> '("S" "H" "A")
如果您正在从头开始寻找解决方案,只需遍历列表并应用于empInfo-FNAME
每个元素,构建一个新列表作为输出:
(define (first-names lst)
(if (null? lst)
'()
(cons (empInfo-FNAME (car lst))
(first-names (cdr lst)))))
(first-names people)
=> '("S" "H" "A")
推荐阅读
- python - Python Turtle:清除窗口并重新启动游戏
- c++ - 内部和外部成员函数定义的类的多重定义
- koa - 在全路由中间件 Koa-router 中获取映射路由参数
- javascript - 返回数组中的唯一值
- python - 如何根据Python中的第一个元素转换多数组?
- jquery - 需要检查一个输入,最多检查 4 个选项
- python-3.x - 这是 python 3.8 的 gensim hdp 模型上的错误吗?
- c# - 如何更改游戏中不断生成的对象的速度?
- node.js - 如何正确处理 try catch 块上的 child_process `close` 事件?
- ios - 具有返回值的快速函数是否必须使用“返回”关键字