【问题标题】:Generate a list with repeated elements生成包含重复元素的列表
【发布时间】:2011-05-14 00:50:24
【问题描述】:

我有:

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

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

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

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

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

【问题讨论】:

  • 什么是{count:1}?你是说 {count, 1} 吗?

标签: erlang


【解决方案1】:

虽然您的问题可能更具体,但我的猜测是您想使用字典来存储键值对,其中值是计数器。通过询问这个问题,您试图实现的是如何初始化 dict 并将计数器设置为 1。

下面的代码会创建一个新的dict,其中key是ListOne中的key,value是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,如果它不存在,将在字典中创建键,并将给定的增量作为初始值。

【讨论】:

  • 我看到这个答案通过消除对 ListTwo 的需要来解决您的问题,但是对于通过 google 或类似网站找到这个问题并且确实需要动态构建重复元素列表的任何人,请考虑 list:duplicate /2 erlang.org/doc/man/lists.html#duplicate-2
【解决方案2】:

如果这正是您要寻找的,我不是,但如果 ListTwo 是这样的: [{count,1}, {count,1},.....] 您可以使用以下方法生成它:

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

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

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

显然,您应该为列表的大小选择正确的范围(在我的示例中为 1 到 5)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多