如何从列表中读取元组中的每个元素

How to read each element within a tuple from a list

我想编写一个程序来读取元组列表,在元组中它将包含两个元素。第一个元素可以是一个对象,第二个元素将是该对象的数量。就像:Mylist([{Object1,Numbers},{Object2, Numbers}])
然后我想读取 Numbers 并打印相关对象 Numbers 次,然后将它们存储在列表中。
所以如果Mylist([{lol, 3},{lmao, 2}]),那么我应该得到[lol, lol, lol, lmao, lmao]作为最终结果。
我的想法是首先将这些元组(想象一下,如果有超过 2 个)解压成两个元组,第一个包含对象,第二个包含数量。
之后读取第二个元组中的数字,然后在第一个元组中打印相关对象的确切时间。但我不知道该怎么做。谢谢你的帮助!

列表理解可以做到这一点:

lists:flatten([lists:duplicate(N,A) || {A, N} <- L]).

如果你真的也想打印,使用递归:

p([]) -> [];
p([{A,N}|T]) ->
    FmtString = string:join(lists:duplicate(N,"~p"), " ")++"\n",
    D = lists:duplicate(N,A),
    io:format(FmtString, D),
    D++p(T).

此代码使用 lists:duplicate/2io:format/2 创建格式字符串,将 "~p" 格式说明符复制 N 次,并使用 space 将它们连接起来string:join/2,并添加一个换行符。然后它再次使用 lists:duplicate/2 来获取 AN 个副本的列表,使用格式字符串打印那些 N 项,然后将列表与 a 的结果组合递归调用以创建函数结果。