我想映射一个" flat"结构如:
'(("Jimmy Carter" 10 1 1924)
("Donald Trump" 6 14 1946)
("George W. Bush" 7 6 1946)
("Bill Clinton" 8 19 1946)
("Barack Obama" 8 4 1961))
为:
'((1924
(10
(1
("Jimmy Carter"))))
(1946
(6
(14
("Donald Trump")))
(7
(6
("George W. Bush")))
(8
(19
("Bill Clinton"))))
(1961
(8
(4
("Barack Obama")))))
我。即按照一些"键"列出一个列表,在这个例子中出生年份,月份和日期。对于一般情况,最好的方法是什么?对于只有一个"键"的简单情况,是否有另一种解决方案?每个元素(例如,'democrat
和'republican
)?
答案 0 :(得分:0)
我建议您使用hash-tables
:
(let ((ht (make-hash-table))
(ret ())
(dolist (record my-data)
(push record (gethash (my-key record) ht ())))
(maphash (lambda (key records)
(push (list key (transform record)) ret))
ht)
ret)
这里
my-data
是您的原始列表my-key
提取分组键(例如,年份)transform
将展示位置(name a b c)
映射到您希望在返回值中看到的层次结构。