Создать список с повторяющимися элементами - PullRequest
0 голосов
/ 13 мая 2011

у меня есть:

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

Теперь я хочу создать новый список, сжав ListOne с помощью ListTwo. ListTwo выглядит так:

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

Какой хороший способ динамически генерировать ListTwo? Каждый элемент списка будет одинаковым.

Я хочу передать результат zip в dict:from_list. Так что, возможно, почтовый индекс - не лучший подход.

Ответы [ 2 ]

4 голосов
/ 13 мая 2011

Хотя ваш вопрос может быть более конкретным, я предполагаю, что вы хотите использовать словарь для хранения пар ключ-значение, где значение является счетчиком. Задавая этот вопрос, вы пытаетесь достичь, как инициализировать dict со счетчиком, установленным в 1.

Следующий код создаст новый 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, если он еще не существует, с заданным шагом в качестве начального значения.

3 голосов
/ 13 мая 2011

Нет, если это именно то, что вы ищете, но если ListTwo выглядит примерно так: [{count, 1}, {count, 1}, .....] вы можете сгенерировать его с помощью:

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

Я думаю, что каждый аргумент ListTwo является кортежем, поэтому вы должны разделить два значения с помощью "," ... в противном случае, если ваш пример верен, вы можете сделать что-то вроде:

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

очевидно, вы должны выбрать правильный диапазон для размера вашего списка (в моем примере от 1 до 5)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...