下面的代码可以按照我想要的方式对列表进行排序,但我必须使用first
,second
等列表操作。如果我只有一个整数索引,我该怎么用呢?排序
#lang racket
(define lst '(("1" "Z") ("2" "A")))
(sort lst #:key second string<?)
我可以提出一个解决方案,即创建函数或语法定义以将int转换为适当的操作。如果索引为0,则将其转换为first
。但这似乎并不令人愉快,这种类型的列表操作只能达到tenth
?
谢谢!
答案 0 :(得分:2)
使用list-ref
:
> (define lst '(1 2 3 4 5))
> (list-ref lst 0)
1
> (list-ref lst 4)
5
第一个参数是要引用的列表,第二个参数是索引。
first
到tenth
的功能实际上只是list-ref
的简写。
答案 1 :(得分:1)
还可以指定比较器:
(define (sorter ll i)
(sort ll
(lambda(a b)
(if (string<? (list-ref a i) (list-ref b i))
#t #f))))
(define lst '(("1" "Z") ("2" "A")))
(sorter lst 0)
(sorter lst 1)
输出:
'(("1" "Z") ("2" "A"))
'(("2" "A") ("1" "Z"))