我有两个列表
(a b c d)
是一组(唯一元素列表)和
((a 2) (a 1) (b 3) (c 1) (c 4) (c 2) (c 5) (d 3)
现在,我想要一个包含第一个列表中所有元素的列表,像这样。
((a 2 1 3) (b 3) (c 1 4 2 5) (d 3))
我使用两个for循环(for ((ele1 lst1)) ...)
和(for ((ele2 lst2)) ...)
实现了上述目标,但对我的解决方案不满意。我也看过group-by
很简单,但这并不是我想要的。
我认为,有一个更好而优雅的功能解决方案。我对吗?有人可以告诉我吗?
谢谢。
编辑
我正在使用Racket
。
这是我实现该目标的迭代代码。
(define (student-log log)
(for ((n unique-names))
(let ((l (list n)))
(for ((i data))
(cond ((equal? n (car i))
(set! l (append l (list (cadddr i)))))))
(set! log (append log (list l))))) log)
我正在使用局部变量l
,并使用set!
重设l
和log
的值。它看起来更像是过程性,而不是功能性。
答案 0 :(得分:1)
感谢@Sorawee Porncharoenwase
(define (group-by-my-rule mix-ls)
(map (λ (ls) (cons (first (first ls)) (map second ls)))
(group-by first mix-ls)))
(group-by-my-rule '((a 1) (a 2) (a 3) (b 1) (e 2) (c 2) (c 3) (c 4) (d 1) (e 1) (c 1)))