2014-02-15 3 views
-3

У меня есть список A, [('a', 3), ('b', 0), ('c',0)], и вы хотите заменить ('b',0) на ('b', 13). И верните новый список B, [('a', 3), ('b', 13), ('c',0)]. Как это сделать в haskell?Заменить второе значение кортежа в списке кортежей

Благодаря

+6

Этот вопрос не показывает никаких исследований. Пожалуйста, прочитайте о [Как задать хороший вопрос] (http://stackoverflow.com/questions/how-to-ask). – crockeea

ответ

1

Если вы просто хотите, чтобы заменить все вхождения ('b', 0), то вы можете использовать map:

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 
Смежные вопросы