如何在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'