2011-11-08 3 views
5

플로트 목록의 목록을 조작해야하는 곳에 문제가 있습니다. [[흙손]]. 이 수레 목록은 길이가 4입니다. 처음 세 요소는 테스트되지만 네 번째 것은 무시하는 중복을 제거하고 싶습니다. 이것은 다중 부품 문제의 마지막 부분이며 잠시 동안 벽을 머리에 대고 사용하는 방법을 알아 냈습니다. 나는 도움이되는 정보를 찾을 수 없다.nubBy 사용법을 이해하는 데 어려움이 있습니다

fixDuplicates :: [[Float]] -> [[Float]] 
fixDuplcates [[]] = [[]] 
fixDuplicates x = nubBy ? 
+2

토픽 주석 : 네 번째 숫자가 특별하면, 데이터 유형을 정의 할 때 어떻게 든 알 수 있습니까? 종류의 값을 사용하는 대신 레코드를 저장하기 위해 의미있는 이름을 가진 구조체를 사용하는 방법의 종류. – hugomg

+0

데이터 유형이 미리 정의되어있어서 어떤 메신저로 작업해야합니까 –

+0

변환 함수를 만들 수 있습니다;) – hugomg

답변

10

nubBy은 요소를 비교하는 데 사용할 함수를 사용합니다. 평등의 정의는 처음 세 요소가 일치하면 두 목록이 동일하다는 것입니다. 이것의 간단한 구현은 다음과 같습니다.

fixDuplicates xs = nubBy firstThreeMatch xs 
    where firstThreeMatch ys zs = take 3 ys == take 3 zs 
+8

반복을 제거하고 추가로 'nubBy ((= ==) \'on \'take 3)'가 될 수 있습니다. 'Data.Function'의 임포트. – ephemient

+0

완벽한, 고맙습니다, 내 프로그램은 이제 완벽하게 작동합니다. –

관련 문제