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

Tur*_*sun 0 scheme racket

在 Racket 中,一种点分隔数字(例如软件的版本号)如何?

例如

'("1.1.2" "1.0.0" "1.3.3" "1.0.7" "1.0.2")
Run Code Online (Sandbox Code Playgroud)

分类为

'("1.0.0" "1.0.2" "1.0.7" "1.1.2" "1.3.3")
Run Code Online (Sandbox Code Playgroud)

Sha*_*awn 5

拆分每个字符串#\.并将其转换为数字列表,然后根据该转换进行排序。使用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))
Run Code Online (Sandbox Code Playgroud)