球拍:如何对点分隔的数字进行排序
在 Racket 中,一种点分隔数字(例如软件的版本号)如何?
例如
'("1.1.2" "1.0.0" "1.3.3" "1.0.7" "1.0.2")
分类为
'("1.0.0" "1.0.2" "1.0.7" "1.1.2" "1.3.3")
回答
拆分每个字符串#\.并将其转换为数字列表,然后根据该转换进行排序。使用SRFI-67比较列表的示例:
#lang racket
(require srfi/67)
(define versions '("1.1.2" "1.0.0" "1.12.1" "1.3.3" "1.0.7" "1.0.2"))
(define (sort-versions vlst)
(sort vlst (lambda (a b) (< (list-compare integer-compare a b) 0))
#:key (lambda (v) (map string->number (string-split v ".")))
#:cache-keys? #t))
(writeln (sort-versions versions))