如何使用空格连接列表中的两个字符串,如:
["StringA", "StringB"]
变
"StringA StringB"
thiagofm.. 197
如果您只想加入一些任意列表:
"StringA" <> " " <> "StringB"
或者只是使用字符串插值:
"#{a} #{b}"
如果您的列表大小是任意的:
Enum.join(["StringA", "StringB"], " ")
......以上所有解决方案都将返回
"StringA StringB"
使用管道运算符的替代语法:`["StringA","StringB"] |> Enum.join""` (33认同)
当您实际上不需要管道操作时,应该避免使用管道操作符. (8认同)
@Schrockwell是的,"应该"太多了.我的意思是,这种情况下你没有获得可读性,所以一个简单的函数调用会使思考更明确. (5认同)
@EdMelo关心详细说明原因?从技术上讲,您从未真正"需要"管道操作,因为嵌套函数调用可以实现相同的行为. (3认同)
Carlos Martí.. 59
如果你拥有的是一个任意列表,那么你可以使用Enum.join
,但如果只有两个或三个,显式字符串连接应该更容易阅读
"StringA" <> " " <> "StringB"
但是,如果您要通过网络输出,通常不需要将其作为单个字符串存储在内存中.在这种情况下,使用iolist(特定类型的深度列表)可能是有利的,这样可以避免复制数据.例如,
iex(1)> IO.puts(["StringA", " ", "StringB"]) StringA StringB :ok
由于您可以将这些字符串作为变量放在某处,通过使用深层列表,您可以避免分配一个全新的字符串,只是为了将其输出到别处.elixir/erlang中的许多函数都理解iolists,因此您通常不需要做额外的工作.
一个Enum.reduce也可以用于你的例子吗?
iex(4)> Enum.reduce(["StringA", "StringB"], fn(x, acc) -> x <> " " <> acc end)
"StringB StringA"
为了完整性,您还可以使用字符串插值:
iex(1)> [a, b] = ["StringA", "StringB"] iex(2)> "#{a} #{b}" "StringA StringB"
如果你拥有的是一个任意列表,那么你可以使用Enum.join
,但如果只有两个或三个,显式字符串连接应该更容易阅读
"StringA" <> " " <> "StringB"
但是,如果您要通过网络输出,通常不需要将其作为单个字符串存储在内存中.在这种情况下,使用iolist(特定类型的深度列表)可能是有利的,这样可以避免复制数据.例如,
iex(1)> IO.puts(["StringA", " ", "StringB"]) StringA StringB :ok
由于您可以将这些字符串作为变量放在某处,通过使用深层列表,您可以避免分配一个全新的字符串,只是为了将其输出到别处.elixir/erlang中的许多函数都理解iolists,因此您通常不需要做额外的工作.
如果您只想加入一些任意列表:
"StringA" <> " " <> "StringB"
或者只是使用字符串插值:
"#{a} #{b}"
如果您的列表大小是任意的:
Enum.join(["StringA", "StringB"], " ")
......以上所有解决方案都将返回
"StringA StringB"