我想在一个dict上调用map,并得到它们的值的列表。Erlang没有内置到dict模块中,所以我是如何解决这个问题的:
Fn = fun(Tuple) ->
[Key, Value] = Tuple,
string:join([Key, Value], "=")
end,
lists:map(Fn, dict:to_list(Dict)).问题是键和值会被多次赋值。如何在匿名函数对string:join的调用中“拆分”由dict:to_list返回的键/值元组
发布于 2012-09-23 08:32:40
我不确定我是否听懂了你的要求。你说的“键和值被多次赋值”是什么意思?
当你说你想在字典上映射并取回一个值列表时,你是指"Key-Value“意义上的值吗?在这种情况下,您可以执行以下操作:
Values = [V || {_,V} <- dict:to_list(Dict)].这将只给你一个列表的“值”方面的关键字-值性质的字典。
您也可以通过执行类似的操作来获得键的列表。
Keys = [K || {K,_} <- dict:to_list(Dict)].如果您只想将键和值分开列出,则可以使用list:unzip/1。
{Keys, Values} = lists:unzip(dict:to_list(Dict)).那么Keys将是所有键的列表,而Values将是所有值的列表。
或者,您是否担心Key和Value都被赋值(就像在变量赋值中一样)?如果是这样,就不要这样做。这些赋值速度很快,而且只是指针,而不是内存副本。
发布于 2012-09-23 04:19:09
因为你有一个元组列表,其中有一个列表作为值,所以你可能看起来像这样:
[string:join (K,V,"=") | {K,Values} <- dict:to_list(Your_dictionary),V <- Values]。
希望这能有所帮助
发布于 2012-09-23 04:09:15
相对较新的人,他们以前从未使用过dict模块,但这似乎对我很有效:
dict:fold(fun(Key, Value, Accum) ->
[Value | Accum] end, [], D).示例:
init() ->
Dict = dict:new(),
Dict2 = dict:append(key, value, Dict),
Dict3 = dict:append(key2, value2, Dict2),
dict:append(key3, value3, Dict3).
grab_values(D) ->
dict:fold(fun(Key, Value, Accum) ->
[Value | Accum] end, [], D).已调用:
4> D = dictfold:init().
{dict,3,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],
[[key2,value2]],
[[key3,value3]],
[],[],[],[],[],
[[key,value]],
[],[],[],[],[],[]}}}
5> dictfold:grab_values(D).
[[value2],[value3],[value]]https://stackoverflow.com/questions/12547223
复制相似问题