¿Cómo unir dos cadenas en una lista con un espacio, como:
["StringA", "StringB"]
se convierte
"StringA StringB"
Si solo quieres unirte a alguna lista arbitraria:
"StringA" <> " " <> "StringB"
o simplemente use la interpolación de cadenas:
"#{a} #{b}"
Si el tamaño de su lista es arbitrario:
Enum.join(["StringA", "StringB"], " ")
... todas las soluciones anteriores volverán
"StringA StringB"
["StringA", "StringB"] |> Enum.join " "
Si lo que tiene es una lista arbitraria, puede usarla
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 leerSin embargo, a menudo no necesita tenerlo como una sola cadena en la memoria si va a generarlo, por ejemplo, a través de la red. En ese caso, puede ser ventajoso usar una iolist (un tipo específico de una lista profunda), que le ahorra copiar datos. Por ejemplo,
Dado que tendría esas cadenas como variables en alguna parte, al usar una lista profunda, evita asignar una cadena completamente nueva solo para generarla en otro lugar. Muchas funciones en elixir / erlang entienden las iolistas, por lo que a menudo no necesitaría hacer el trabajo adicional.
fuente
Respondiendo para completar, también puede usar la interpolación de cadenas :
fuente
Si estuvo de acuerdo con agregar un espacio en su lista, podría tratarlo como una lista:
Esto le da algunos aumentos de rendimiento ya que no está duplicando ninguna de las cadenas en la memoria.
fuente
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"
fuente
Depende de lo que intentes hacer. Si solo está tratando de escribir en una nueva variable, simplemente use:
Interpolación de cuerdas
Concatenación de cadenas:
"StringA" <> " " <> "StringB
Enum.join()
:["StringA", "StringB"] |> Enum.join(" ")
Sin embargo, como mencionó Uri, las LIO también se pueden usar:
["StringA", " ", "StringB"] |> IO.iodata_to_binary
Los IOListas realmente serán los más eficaces si necesita preocuparse por el consumo de recursos. Big Nerd Ranch tiene una buena reseña sobre las ganancias de rendimiento con IOLists.
fuente
Hay varios métodos, pero saber cómo maneja los valores nulos puede determinar qué método debe elegir.
Esto arrojará un error
Esto solo insertará una cadena "" en blanco:
Como será esto:
Considere también los tipos. Contigo
<>
no obtienes ningún casting gratis:El rendimiento en la práctica parece más o menos el mismo:
Entonces, realmente depende de si desea bloquearse o no cuando los valores interpolados son
nil
o del tipo incorrecto.fuente
También podrías hacer
'string A' ++ ' ' ++ 'string B'
fuente
Considere usar una Lista de E / S, si tiene ["Cadena1", "cadena2"] y usa iolist_to_binary / 1, copiará esas cadenas en una nueva cadena. Si tiene una lista de E / S, puede generarla en la mayoría de los casos y la concatenará en el puerto. Y esta es la clave, el tiempo de ejecución no necesitará hacer copias de los datos, por lo que es mucho más eficiente que la concatenación.
fuente