2016-10-14 1 views
1

firstsecondなどのリスト操作を使用しなければならない点を除いて、以下のコードではリストをソートできます。整数インデックスしかない場合は、ソートにどのように使用しますか?インデックスを使用してリストのリストをソートする方法はありますか?

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

(sort lst #:key second string<?) 

intを適切な操作に変換する関数または構文定義を作成する1つの解決策を考え出すことができます。たとえば、インデックスが0の場合は、firstに変換します。しかし、これは楽しいとは思われません、このタイプのリスト操作はtenthまでしかありませんか?

ありがとうございます!

答えて

2

使用list-ref

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

最初のパラメータが参照するリストであり、2番目はインデックスです。

機能firstからtenthは、実際にはlist-refの省略形です。

+0

ああ、私は 'リスト-ref'から返された番号を使用することはできません。たとえば、 '(sort lst#:key 0 string <?)'は動作しません。私は 'first'を使う必要があります。あなたが何を暗示しているのか誤解していない限り。 – ludluck

+1

それで '(sort lst#:key(lambda(l)(list-ref l 0))string <?)'を使うことはできませんか? – Majora320

+0

ありがとうございます。 – ludluck

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")) 
関連する問題