生成包含重复元素的列表

时间:2011-05-13 08:15:49

标签: erlang

我有:

ListOne = ['foo', 'bar', ..]

我现在想通过使用ListTwo压缩ListOne来创建一个新的List。 ListTwo看起来像这样:

ListTwo = [{count, 1},{count, 1},{count,1}, ..] 

动态生成ListTwo的好方法是什么?每个列表项都是相同的。

我想将zip的结果提供给dict:from_list。所以也许拉链不是最好的方法。

2 个答案:

答案 0 :(得分:4)

虽然您的问题可能更具体,但我的猜测是您希望使用字典来存储值为计数器的键值对。你想通过问这个来实现的是如何在计数器设置为1的情况下初始化dict。

下面的代码将创建一个新的dict,其中键是ListOne的键,值为1:

ListOne = [foo, bar, baz, quux].
D1 = dict:from_list([{Elem, 1} || Elem <- ListOne]).

现在,要增加这些计数器,您可以使用dict:update_counter/3

D2 = dict:update_counter(foo, 1, D1).

要递减,您只需给出一个负数作为增量。

值得注意的是,dict:update_counter/3将在dict中创建密钥(如果它尚未存在),并以给定的增量作为初始值。

答案 1 :(得分:3)

我不是,如果这是你正在寻找的东西,但如果ListTwo是这样的:[{count,1},{count,1},.....]你可以生成它:

ListTwo = [{count, 1} || _X <- lists:seq(1,5)].

我认为ListTwo的每个参数都是一个元组,因此你应该将这两个值与“,”分开......否则,如果你的例子是正确的,你可以做一些事情:

ListTwo = [{'count:1'} || _X <- lists:seq(1,5)].

显然你应该为你的列表大小选择合适的范围(在我的例子中从1到5)