2013-11-15 1 views
0

이 코드로 도울 수 있습니다 .i 전체 튜플을 의 마지막 요소 인 교사를 추출하여 전체 목록을 정렬하는 데 사용합니다. 목록에서 요소를 추출하고 전체 목록을 정렬하는 데 사용합니다.

import Data.List 

type CourseData = [(String,String,String,String,String)] 
l :: CourseData 

--list contains name of student, year, programme and personal tutor 
l = [("fondi","201202378","2012","Bsc280"," tautology"), 
    ("fondi","201202378","2012","Bsc280"," tautology"), 
    ("Sylvee","200801245","2008","Bsc209","puma"), 
    ("dijeje","201307845","2013","Bsc205","tautology"), 
    ("heron","201002567","2010","Bsc280","setlhako"), 
    ("slow","201198746","2011","Bsc205"," mampu"), 
    ("Sylvee","201198746","2008","bsc209"," puma"), 
    ("Sylvee","201198746","2008","bsc209"," puma")] 




sortByTutor :: CourseData ->String -> [String] 
sortByTutor list =sort[tutor|(name,id,year,prog,tutor)<-list ] 

내가 위의 방법을 사용

, 그것은 단지 내가 그것을 교사의 이름에 따라 분류 전체 목록을 반환하도록 변경할 수 있습니다 뭐야 교사의 정렬 된 목록을 반환?

답변

1

당신은 Data.List에서 sortBy을 시도 할 수 있습니다 : Ankur 말했다 무엇

sortBy (\(_,_,_,_,t1) (_,_,_,_,t) -> compare t1 t) l 
+0

또한 이름에는 샘플 데이터의 시작 부분에 공백이 있습니다. – Ankur

+0

고맙습니다. :)))) @Ankur – tonto

+0

u는 정말로 나를 구해 줬습니다. @Ankur – tonto

1

, sortBy를 사용합니다. 당신이 튜플에서 필드를 추출 접근 기능, 예를 들어,이있는 경우

import Data.List (sortBy) 
import Data.Function (on) 

sortByTutor xs = sortBy (compare `on` \(_,_,_,_,t) -> t) xs 

이 유용 : 다음은이 종류를 작성하는 약간 다른 방법입니다 교사를위한 :

tutor (_,_,_,_,t) = t 

그런 다음 당신은 단순히 그들을 다시 사용할 수 있습니다 : 매우 읽을 수

sortByTutor xs = sortBy (compare `on` tutor) xs 

합니다.

+0

''(비교'on')''와 동등한'Data.Ord.comparing'조차 있습니다. – kosmikus

+0

감사합니다. @ 한케 – tonto

관련 문제