2016-10-14 275 views
1

下面的代码可以对列表进行排序,除了我必须使用列表操作,如first,second等。如果我只有一个整数索引,我将如何使用它进行排序?有没有办法使用索引对列表进行排序?

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

(sort lst #:key second string<?) 

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

谢谢!

回答

2

使用list-ref

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

第一个参数是引用列表,并且第二个是索引。

函数firsttenth实际上只是list-ref的简写。

+0

哦,但我不能使用来自'列表ref'返回的数字。例如,'(sort lst#:key 0 string <?)'不起作用。我必须使用'第一'。除非我误解你的意思。 – ludluck

+1

然后你不能使用'(sort lst#:key(lambda(l)(list-ref l 0))string <?)'? – Majora320

+0

你是对的谢谢你。 – ludluck

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")) 
相关问题