如何在Elixir中joinstring?
如何在列表中使用空格来连接两个string,如:
["StringA", "StringB"]
变
"StringA StringB"
我find了一些麻烦(正在searchstring模块的解决scheme),所以我想分享给你们。
Enum.join(["StringA", "StringB"], " ")
将返回
"StringA StringB"
从这里回答下面,也可以使用插值:
"#{a} #{b}"
如果你有什么是一个任意的列表,那么你可以使用Enum.join
,但如果它只是两三个,显式string连接应该更容易阅读
"StringA" <> " " <> "StringB"
但是,如果要通过例如networking输出它,通常不需要将其作为内存中的单个string。 在这种情况下,使用iolist(一个特定types的深度列表)可能是有利的,它可以避免复制数据。 例如,
iex(1)> IO.puts(["StringA", " ", "StringB"]) StringA StringB :ok
既然你将这些string作为variables的地方,通过使用一个深层的列表,你可以避免分配一个新的string来输出。 elixir / erlang的许多function都理解iolists,所以你通常不需要做额外的工作。
为了完整性回答,您也可以使用string插值 :
iex(1)> [a, b] = ["StringA", "StringB"] iex(2)> "#{a} #{b}" "StringA StringB"
一个枚举减less会为你的例子工作呢?
iex(4)> Enum.reduce(["StringA", "StringB"], fn(x, acc) -> x <> " " <> acc end)
"StringB StringA"
如果您可以在列表中添加空格,则可以将其视为iolist:
["StringA", " ", "StringB"] |> IO.iodata_to_binary # "StringA StringB"
这样可以提高性能,因为不会复制内存中的任何string。
你也可以做'串A'++''++'串B'