2016-10-14 3 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 

첫번째 파라미터 참조하는리스트이고, 두 번째는 인덱스이다.

기능 first에서 tenth은 실제로는 list-ref의 줄임말입니다.

+0

오하지만 난'리스트 ref'에서 반환 된 번호를 사용할 수 없습니다. 예를 들어'(sort lst # : key 0 string ludluck

+1

그러면'(sort lst # : key (lambda (l) (list-ref l 0)) 문자열 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")) 
관련 문제