2013-04-24 2 views

답변

26

우선 목록을 처리 할 때 색인이 필요한 경우 list는 색인과 같은 구조 (배열)가 아니기 때문에 차선의 알고리즘을 구현한다는 특정 신호입니다. 색인을 처리해야하는 경우 vector을 사용하는 것이 좋습니다. 니키타 볼코프의 답변을 개정

Prelude> zip [0..] "a+bc?|(de)*fg|h" :: [(Int, Char)] 
[(0,'a'),(1,'+'),(2,'b'),(3,'c'),(4,'?'),(5,'|'),(6,'('),(7,'d'),(8,'e'),(9,')'),(10,'*'),(11,'f'),(12,'g'),(13,'|'),(14,'h')] 
+10

인덱스를 처리하는 것은 매우 일반적인 요구 사항입니다 (예 : 오류보고 용). –

+8

차선의 알고리즘을 사용하지 않고리스트를 처리 할 때, 인덱스에는 많은 용도가 있습니다. 그래서 그것은 매우 불확실한 사인입니다. –

27

, 당신은 같은 기능을 사용할 수 있습니다

실제 문제에 관한 다음과 같은 코드의 int를 증가하여 목록의 항목을 쌍으로 다음 결과를 통해 매핑 할 수 있습니다 :

-- variant of map that passes each element's index as a second argument to f 
mapInd :: (a -> Int -> b) -> [a] -> [b] 
mapInd f l = zipWith f l [0..] 
+3

또는'mapInd f l = zipWith f l [0 ..]'. – dave4420

+0

@ dave4420 : 좋은 지적입니다, 감사합니다. –

+2

오랜 시간이 걸렸지 만 간결하게하기 위해 다음과 같이 작동합니다.'mapInd f = zipWith f [0 ..]' – Kittsil

관련 문제