球拍:如何对点分隔的数字进行排序

在 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))

以上是球拍:如何对点分隔的数字进行排序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>