首页 > 解决方案 > 如何获取特定结构的所有实例的列表

问题描述

我试图弄清楚,如何获取特定结构的所有实例的列表让我们说: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")

我只是想用循环来做。

标签: racket

解决方案


通常,我们会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")

推荐阅读