[erlang-questions] Modify a list of tuples

Lev Walkin <>
Thu Aug 14 23:43:35 CEST 2008


Dave Bryson wrote:
> What's the best way to modify a value for a given tuple in the list  
> below?
> 
> I have a large list with the following type of structure:
> 
> [ [{a,1},{b,2}], [{b,3},{a,4}] ]
> 
> I want to preserve the structure of the list and change a value on all  
> the tuples with a given key. So for example, change all the values on  
> the "b" tuple so the result would be:
> 
> [ [{a,1},{b,CHANGED}], [{b,CHANGED},{a,4}] ]
> 
> I've tried list comprehension but can't get it to preserve the rest of  
> the list.


(fun(L, Property, Value) ->
	[T || TS <- L, T <- [
	    [{K, Value}
		|| {K, V} <- TS,
		Value <- [case K of Property -> Value; _ -> V end]
	    ]
	]
	]
end)([ [{a,1},{b,2}], [{b,3},{a,4}] ], b, 'CHANGED').

=== cut ===
Eshell V5.6.3  (abort with ^G)
1> (fun(L, Property, Value) -> [T || TS <- L, T <- [[{K, Value} || {K, 
V} <- TS, Value <- [case K of Property -> Value; _ -> V end]]] ] end)([ 
[{a,1},{b,2}], [{b,3},{a,4}] ], b, 'CHANGED').
[[{a,1},{b,'CHANGED'}],[{b,'CHANGED'},{a,4}]]
2>
=== cut ===

-- 
vlm



More information about the erlang-questions mailing list