elixir - sintaxis - unir dos variables en r
Cómo unir cadenas en Elixir? (6)
Cómo unir dos cadenas en una lista con un espacio, como:
["StringA", "StringB"]
se convierte
"StringA StringB"
Respondiendo por la integridad, también puede usar la interpolación de cadenas :
iex(1)> [a, b] = ["StringA", "StringB"]
iex(2)> "#{a} #{b}"
"StringA StringB"
Si estuvo de acuerdo con agregar un espacio en su lista, podría tratarlo como un iolist:
["StringA", " ", "StringB"] |> IO.iodata_to_binary # "StringA StringB"
Esto le da algunos aumentos de rendimiento ya que no está duplicando ninguna de las cadenas en la memoria.
Si lo que tienes es una lista arbitraria, entonces puedes usar Enum.join
, pero si es solo para dos o tres, la concatenación explícita de cadenas debería ser más fácil de leer
"StringA" <> " " <> "StringB"
Sin embargo, a menudo no es necesario que lo tenga como una sola cadena en la memoria si va a enviarlo, por ejemplo, a través de la red. En ese caso, puede ser ventajoso usar un iolist (un tipo específico de una lista profunda), que le ahorra copiar datos. Por ejemplo,
iex(1)> IO.puts(["StringA", " ", "StringB"])
StringA StringB
:ok
Dado que tendría esas cadenas como variables en alguna parte, al usar una lista profunda, evitará asignar una cadena completamente nueva solo para enviarla a otro lugar. Muchas funciones en elixir / erlang comprenden iolists, por lo que a menudo no necesitarías hacer el trabajo extra.
Si solo quieres unirte a una lista arbitraria:
"StringA" <> " " <> "StringB"
o simplemente usa la interpolación de cadenas:
"#{a} #{b}"
Si el tamaño de tu lista es arbitrario:
Enum.join(["StringA", "StringB"], " ")
... todas las soluciones anteriores regresarán
"StringA StringB"
También podría hacer ''string A'' ++ '' '' ++ ''string B''
Un Enum.reduce también funcionaría para su ejemplo, ¿no?
iex(4)> Enum.reduce(["StringA", "StringB"], fn(x, acc) -> x <> " " <> acc end)
"StringB StringA"