vectores una operaciones obtener listas lista indice elementos creacion concatenar con cambiar array arrays list elixir

arrays - una - Cómo obtener elementos de la lista por índice en elixir



obtener el indice de un array php (1)

{status, body} = File.read("/etc/hosts") if status == :ok do hosts = String.split body, "/n" hosts = Enum.map(hosts, fn(host) -> line_to_host(host) end) else IO.puts "error reading: /etc/hosts" end

Tengo la siguiente función de elixir donde leo el archivo / etc / hosts y trato de dividir línea por línea usando String.split .

Luego mapeo a través de la lista de líneas de hosts y llamo a line_to_host (host) para cada uno. El método line_to_host divide la línea por " " y luego quiero configurar la variable from y to :

def line_to_host(line) do data = String.split line, " " from = elem(data, 0) // doesn''t work to = elem(data, 1) // doesn''t work either %Host{from: from, to: to} end

Miré a través de stackoverflow, el elixir docs y busqué en Google sobre cómo obtener un elemento de lista en un índice específico. Sé que hay head/tail pero tiene que haber una mejor manera de obtener los elementos de la lista.

elem(list, index) hace exactamente lo que necesito, pero desafortunadamente no funciona con String.split .

Cómo obtener elementos de lista / tupla por ID en elixir


Puedes usar la coincidencia de patrones para eso:

[from, to] = String.split line, " "

Quizás desee agregar la opción parts: 2 para asegurarse de que solo obtendrá dos partes en caso de que haya más de un espacio en la línea:

[from, to] = String.split line, " ", parts: 2

También está Enum.at/2 , que funcionaría bien aquí pero es unidiomático. El problema con Enum.at es que, debido a la implementación de la lista en Elixir, debe atravesar la lista completa hasta el índice solicitado, por lo que puede ser muy ineficiente para listas grandes.

Edición: aquí está el ejemplo solicitado con Enum.at , pero no lo usaría en este caso

parts = String.split line, " " from = Enum.at(parts, 0) to = Enum.at(parts, 1)