Я пытаюсь отфильтровать список кортежей в зависимости от того, соответствует ли первый элемент кортежей элементам в другом списке.Множественные (основанные на кортеже) генераторы в понимании списка в Erlang
Например, первоначальный список
163>Shoppinglist.
[{oranges,2},{milk,1},{apples,2}]
Если я пытаюсь использовать несколько генераторов с <-
нотации, то петли и результаты в элементах повторяется несколько раз, как это:
164> [(Item)||{Item,Unit}<-Shoppinglist, Item<-[apples,milk]].
[apples,milk,apples,milk,apples,milk]
Это объясняется в ответе Алексея Романова в этом вопросе: Multiple filters in list comprehension in Erlang. Основываясь на этом ответе, я могу сделать ниже, и он отлично работает.
165>[{Item}||{Item,Unit}<-Shoppinglist,(Item==apples) or (Item==milk)].
[apples, milk]
Но это не реально удовлетворить свою потребность, так как я хотел бы второй список Item<-[apples,milk]
прийти в качестве входных данных, а потому, что не всегда может быть практически вручную перечислить все матчи, как (Item==apples) or (Item==milk)
для очень длинный список.
Итак, есть ли способ использовать несколько списков в качестве генераторов? Или более умный способ решить мою проблему. Я только недавно начал работать с Erlang (с помощью Прагматического программирования и книг LYSE), поэтому я все еще знаю очень мало.
вскоре после написания вопроса, мне пришло в голову, что я мог бы преобразовать второй список в список кортежей и использовать только один генератор: '[товар | | {Item, _Unit} <- [{apples, 0}, {milk, 0}]]. Это вводит новые вещи, которые я еще не знаю, и продолжаю изучать кривую http://stackoverflow.com/questions/5214821/list-to-list-of-tuples-convertion и http://stackoverflow.com/questions/3936613/erlang-prepending-an-element-to-a-tuple – Yogesch