2017-11-29 5 views
-3

에 알파벳순으로 표시되도록 정렬 할 튜플이 포함 된 목록이 있습니다. 나는 Data.List sorting으로 주위를 둘러 보았지만 튜플의 값이 아닌리스트를 정렬 할 수만 있었다. 항상 가지고 있기 때문에Haskell - 튜플 내에서 알파벳순으로 문자열 정렬

본질적으로

, 튜플은 하나 주문 또는 역 순서로 할 수 있습니다

[("bar","foo"),("overflow","stack"),("help","please")] 

답변

3

목록에

[("foo","bar"),("stack","overflow"),("help","please")] 

의 목록을 설정하는 방법이 있나요 정확하게 두 요소가 있기 때문에 이것들은 유일한 순열입니다. 따라서 어떤 경우인지를 확인하고 필요한 경우 튜플을 한 번 플립해야합니다. 튜플 (I은 최대 64 개 개의 요소를 생각하는) 길이가 다를 수 있지만 당신은 단지 각 요소

sortTuplesInList :: Ord a => [(a,a)] -> [(a,a)] 
sortTuplesInList = map sortTuple 
+0

지도 키워드는 내가 찾고있는 곳이었습니다. 우리 가정교사는 아직 하스켈 코스에 없었습니다. – albinantti

+10

['map'] (http://hackage.haskell.org/package/base-4.10.0.0/docs/Prelude.html#v:map)은 키워드가 아니며 기능입니다. –

1

에 독립적으로 동작을 적용하기 때문에

sortTuple :: Ord a => (a,a) -> (a,a) 
sortTuple (x,y) 
    | x>y  = ... 
    | otherwise = ... 

이 질문은, 래퍼 목록을 함께 할 수 없다 목록은 동일해야합니다 (예 : 모든 튜플 요소의 길이가 동일해야 함). 도메인에 맞게

import Data.List 

let sortedPairs = [(x,y) | [x,y] <- tmp] 
    where tmp = [sort [x,y] | (x,y) <- [("m","l"),("p","q"),("s","r")]] 

당신은 (패턴 매칭과 변수) 튜플의 크기를 조정할 수 있습니다 :이 쉬운 지능형리스트 같은 것을 사용한다.

희망이 도움이됩니다.