我希望能够使用以下命令存储Map:dets
目前,这是我正在尝试实施的解决方案:
# a list of strings
topics = GenServer.call(MessageBroker.TopicsProvider, {:get_topics})
# a map with each element of the list as key and an empty list as value
topics_map =
topics
|> Enum.chunk_every(1)
|> Map.new(fn [k] -> {k, []} end)
{:ok, table} = :dets.open_file(:messages, type: :set)
# trying to store the map
:dets.insert(table, [topics_map])
:dets.close(table)
不过,我得到
** (EXIT) an exception was raised:
** (ArgumentError) argument error
(stdlib 3.12) dets.erl:1259: :dets.insert(:messages, [%{"tweet" => [], "user" => []}])
如何才能做到这一点?
3条答案
按热度按时间ylamdve61#
我已经用erlang测试过了。你应该先把Map转换成列表。
从dets:insert_new()文档开始
测试码
l3zydbqr2#
陈宇的解决方案很好,但是在得到它之前我已经找到了另一个解决方案,基本上,你可以把Map添加到元组中
然后,您可以使用以下命令获取此Map
vs3odd8k3#
根据我的理解,您希望将
users
和tweets
存储在不同的键下,为此,首先需要构造一个关键字列表,而不是Map。那么您可以使用此关键字列表来创建
dets
。