Как мы можем преобразовать список списка на карту? (Эликсир) - PullRequest
1 голос
/ 15 октября 2019

У меня есть список, который состоит из [A, B, C, D, E] и A имеет список значений [1, 2, 3, 4, 5], аналогично B имеет список значений [1, 2, 3, 4, 5]

Date,SKU,Unit Price,Quantity,Total Price
2019-01-01,Death by Chocolate,180,5,900
2019-01-01,Cake Fudge,150,1,150
2019-01-01,Cake Fudge,150,1,150
2019-01-01,Cake Fudge,150,3,450
2019-01-01,Death by Chocolate,180,1,180
2019-01-01,Vanilla Double Scoop,80,3,240
2019-01-01,Butterscotch Single Scoop,60,5,300
2019-01-01,Vanilla Single Scoop,50,5,250
2019-01-01,Cake Fudge,150,5,750

Что-то вроде этого, но я хочу создать карту, где заголовок равен значениям, соответствующим ему.

Ожидаемый результат выглядит как-товот так: -

[%{date: '2019-01-01',SKU: 'Death by Chocolate', price: 50, quantity: 3},
    %{date: '2019-01-01',SKU: 'Cake Fudge', price: 150, quantity: 3}]

Мне трудно конвертировать что-то вроде этого.

1 Ответ

5 голосов
/ 15 октября 2019

Для вашего конкретного случая использования анализатор CSV будет делать то, что вы ищете, даже если ваше расширение файла не .csv.

Если вы просто хотите использовать один список в качестве ключейдля других списков вы можете объединить Enum.zip/2 с Map.new/1, чтобы сжать список заголовков со списком строк и создать карту (в зависимости от размера файла вы можете работать с потоками вместо списков).

iex> [headers | rows] = do_some_parsing(text)
iex> headers
["Date", "SKU", "Unit Price", "Quantity", "Total Price"]
iex> rows
[["2019-01-01", "Death by Chocolate", 180, 5, 900],
 ["2019-01-01", "Cake Fudge", 150, 1, 150],
 ...]
iex> Enum.map(rows, fn row -> headers |> Enum.zip(row) |> Map.new() end)
[%{"Date" => "2019-01-01", "SKU" => "Death by Chocolate", "Unit Price" => 180, "Quantity" => 5, "Total Price" => 900},
 %{"Date" => "2019-01-01", "SKU" => "Cake Fudge", "Unit Price" => 150, "Quantity" => 1, "Total Price" => 150},
 ...]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...