2017-01-28 157 views
0

我要地圖 「扁平化」 的結構,如:按「鍵」對列表進行「分組」?

'(("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

我建議你使用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)列入您想要在返回值中查看的層級即
相關問題