diff options
author | Christopher Baines <mail@cbaines.net> | 2019-05-18 12:34:37 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2019-05-18 12:34:37 +0100 |
commit | 5124fbc471e860120f0ca1aa6cef7b50b03c0ece (patch) | |
tree | 2654292272c32d863f2a6dee7bcc3fca5bbbdf56 /guix-data-service | |
parent | 48070e4a9952a57eb03a56199ccb5193e0d99055 (diff) | |
download | data-service-5124fbc471e860120f0ca1aa6cef7b50b03c0ece.tar data-service-5124fbc471e860120f0ca1aa6cef7b50b03c0ece.tar.gz |
Add a utility to group list values
This is useful for some queries with duplicated parts of the results.
Diffstat (limited to 'guix-data-service')
-rw-r--r-- | guix-data-service/model/utils.scm | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/guix-data-service/model/utils.scm b/guix-data-service/model/utils.scm index 94a7276..1ece31a 100644 --- a/guix-data-service/model/utils.scm +++ b/guix-data-service/model/utils.scm @@ -1,12 +1,14 @@ (define-module (guix-data-service model utils) #:use-module (srfi srfi-1) #:use-module (ice-9 vlist) + #:use-module (ice-9 receive) #:use-module (squee) #:export (quote-string value->quoted-string-or-null exec-query->vhash two-lists->vhash - deduplicate-strings)) + deduplicate-strings + group-list-by-first-n-fields)) (define (quote-string s) (string-append "'" s "'")) @@ -41,3 +43,16 @@ (cons (first pair) result)))) '() (sort strings string<?))) + +(define (group-list-by-first-n-fields n lists) + (fold (lambda (lst groups) + (receive (key vals) + (split-at lst n) + (append + (alist-delete key groups) + `((,key . ,(append + (or (assoc-ref groups key) + '()) + (list vals))))))) + '() + lists)) |