有没有办法使用索引对列表进行排序?

时间:2016-10-14 19:28:26

标签: racket

下面的代码可以按照我想要的方式对列表进行排序,但我必须使用firstsecond等列表操作。如果我只有一个整数索引,我该怎么用呢?排序

#lang racket
(define lst '(("1" "Z") ("2" "A")))

(sort lst #:key second string<?)

我可以提出一个解决方案,即创建函数或语法定义以将int转换为适当的操作。如果索引为0,则将其转换为first。但这似乎并不令人愉快,这种类型的列表操作只能达到tenth

谢谢!

2 个答案:

答案 0 :(得分:2)

使用list-ref

> (define lst '(1 2 3 4 5))
> (list-ref lst 0)
1
> (list-ref lst 4)
5

第一个参数是要引用的列表,第二个参数是索引。

firsttenth的功能实际上只是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"))