2016-10-14 487 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")) 
相關問題