2014-02-15 3 views
-3

목록이 A이고 [('a', 3), ('b', 0), ('c',0)]이고 ('b',0)('b', 13)으로 바꾸고 싶습니다. 새 목록 B, [('a', 3), ('b', 13), ('c',0)]을 반환하십시오. 내가 어떻게이 일을 할 수 있니?튜플 목록에서 두 번째 튜플 값을 대체하십시오.

덕분에 당신은 단지 당신이 map 사용할 수 있습니다 ('b', 0)의 모든 발행 수를 바꾸려면

+6

이 질문은 연구 노력을 보이지 않습니다. [좋은 질문을하는 법] (http://stackoverflow.com/questions/how-to-ask)을 읽어보십시오. – crockeea

답변

1

: 첫 번째 요소는 다음 'B'당신이 경우 두 번째 값을 바꾸려면

b = map (\p -> if p == ('b', 0) then ('b', 13) else p) a 

을 할 수 있습니다 :

map (\[email protected](f, _) -> if f == 'b' then ('b', 13) else p) l 
+0

위대한, 나는지도를 할 수있을 줄 알았지 만 구문을 모르겠다 ... 내가 처음 값 'b'를 아는 경우에만 터플이 바뀌도록 수정할 수 있습니까? – hboy

+0

@ user1900750 - 가능합니다. 업데이트를 참조하십시오. – Lee

+0

도움을 주셔서 감사합니다. – hboy

0

다음과 같이 할 수도 있습니다.

set :: (Char,Int) -> [(Char,Int)] -> [(Char,Int)] 
set (k,v) []     = [] 
set (k,v) (t:ts) | k == fst t = (k,v) : ts 
       | otherwise = t : set (k,v) ts