2011-05-13 19 views
0

私が持っている:繰り返し要素を持つリストを生成

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

は、私が今ListTwoでListOneをビュンして、新しいリストを作成したいです。 ListTwoは次のようになります。

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

ListTwoを動的に生成するにはどうすればいいですか?すべてのリスト項目は同じになります。

ジップの結果をdict:from_listにフィードしたいと思います。だから、おそらくジッパーが最善のアプローチではない。

+0

{count:1}は何ですか?あなたは{count、1}を意味しますか? – Arjan

+0

はい、修正しました。 –

答えて

4

あなたの質問はより具体的かもしれませんが、私の推測では、辞書を使用して値のどこに値カウンターです。あなたがこれを求めて達成しようとしているのは、カウンタを1に設定して辞書を初期化する方法です。

次のコードは、ListOneのキーでキーが1の新しいdictを作成します。今

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

私はこの回答がListTwoの必要性を排除することで問題を解決することを知っていますが、グーグルなどでこの質問を見つけ、実際には繰り返し要素のリストを作成する必要がある人はリストを考慮してください:duplicate/2 http:// www .erlang.org/doc/man/lists.html#duplicate-2 – mpm

3

これはあなたが探しているものではないが、ListTwoが[{count、1}、{count、1}、.....]のようなものなら、 :

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

私はあなたの例が正しければそう、あなたのように何かをすることがあります...ので、あなたが「」2つの値を分離する必要があり、ListTwoの各引数はタプルであることを考えます

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

明らかに(私の例では1から5まで)

関連する問題