1

before keys insert, the map is as follows:

%{
  "csv" => %Plug.Upload{
    content_type: "text/csv",
    filename: "test.csv",
    path: "/var/folders/vt/hg77q0c112dbh9dphnccm5rc0000gp/T/plug-1665/multipart-1665996444-407934624070418-7"
  },
  "external_base_directory" => "12",
  "id" => "",
  "importer_id" => "1",
  "internal_base_directory" => "12"
}

After inserted, the map is as follows:

chnageset batch before: %{
  "csv" => %Plug.Upload{
    content_type: "text/csv",
    filename: "test.csv",
    path: "/var/folders/vt/hg77q0c112dbh9dphnccm5rc0000gp/T/plug-1665/multipart-1665996444-407934624070418-7"
  },
  "csv_file_name" => "test.csv",
  "external_base_directory" => "12",
  "id" => "",
  "importer_id" => "1",
  "internal_base_directory" => "12",
  "internal_csv_path" => "/var/folders/vt/hg77q0c112dbh9dphnccm5rc0000gp/T/plug-1665/multipart-1665996444-407934624070418-7"
}

My code is as follows:

batch_params_new =
        Map.put(Map.put(batch_params, "csv_file_name", file_name), "internal_csv_path", file_path)

Is it possible to simplify the code?

Chen Yu
  • 3,955
  • 1
  • 24
  • 51
  • 1
    Does this answer your question? [Add / Remove key-value pairs from a Map](https://stackoverflow.com/questions/40251295/add-remove-key-value-pairs-from-a-map) – Adam Millerchip Oct 21 '22 at 20:55

1 Answers1

3

Map.merge/2 is your friend.

batch_params_new =
  Map.merge(batch_params,
    %{"csv_file_name" => file_name,
      "internal_csv_path" => file_path, …})

Sidenote: As for several puts, we usually use pipe |>/2 rather than nested calls in

batch_params_new =
  batch_params
  |> Map.put("csv_file_name", file_name)
  |> Map.put("internal_csv_path", file_path)
Aleksei Matiushkin
  • 119,336
  • 10
  • 100
  • 160