엘릭서에서 문자열을 결합하는 방법?
공백이있는 목록에서 두 문자열을 어떻게 결합합니까?
["StringA", "StringB"]
된다
"StringA StringB"
임의의 목록에 가입하려는 경우 :
"StringA" <> " " <> "StringB"
또는 문자열 보간을 사용하십시오.
"#{a} #{b}"
목록 크기가 임의 인 경우 :
Enum.join(["StringA", "StringB"], " ")
... 위의 모든 솔루션이 반환됩니다
"StringA StringB"
가지고있는 것이 임의의 목록이라면을 사용할 수 Enum.join
있지만 2 ~ 3 인 경우 명시 적 문자열 연결을 쉽게 읽을 수 있어야합니다
"StringA" <> " " <> "StringB"
그러나 네트워크 등을 통해 출력하려는 경우 메모리에서 단일 문자열로 가질 필요가없는 경우가 종종 있습니다. 이 경우, 데이터 복사에서 절약되는 iolist (특정 유형의 딥 목록)를 사용하는 것이 유리할 수 있습니다. 예를 들어
iex(1)> IO.puts(["StringA", " ", "StringB"])
StringA StringB
:ok
딥 목록을 사용하면 해당 문자열을 변수로 사용할 수 있으므로 다른 곳에서 출력하기 위해 완전히 새로운 문자열을 할당하지 않아도됩니다. elixir / erlang의 많은 함수는 iolist를 이해하므로 추가 작업을 수행 할 필요가없는 경우가 많습니다.
완성도에 대한 응답으로 문자열 보간 을 사용할 수도 있습니다 .
iex(1)> [a, b] = ["StringA", "StringB"]
iex(2)> "#{a} #{b}"
"StringA StringB"
Enum.reduce도 귀하의 예에 맞지 않습니까?
iex(4)> Enum.reduce(["StringA", "StringB"], fn(x, acc) -> x <> " " <> acc end)
"StringB StringA"
목록에 공백을 추가해도 괜찮다면이를 iolist로 취급 할 수 있습니다.
["StringA", " ", "StringB"] |> IO.iodata_to_binary # "StringA StringB"
메모리의 문자열을 복제하지 않으므로 성능이 향상됩니다.
당신이하려는 일에 달려 있습니다. 새 변수에 쓰려고하면 다음 중 하나를 사용하십시오.
문자열 보간
a = "StringA" b = "StringB" "#{a} #{b}"
문자열 연결 :
"StringA" <> " " <> "StringB
Enum.join()
:["StringA", "StringB"] |> Enum.join(" ")
그러나 Uri가 언급했듯이 IOList를 사용할 수도 있습니다.
["StringA", " ", "StringB"] |> IO.iodata_to_binary
리소스 소비에 관심이있는 경우 실제로 IOList가 가장 성능이 우수합니다. Big Nerd Ranch는 IOList를 통한 성능 향상에 대해 잘 작성 했습니다.
당신은 또한 할 수 있습니다 'string A' ++ ' ' ++ 'string B'
IO 목록 사용을 고려하십시오. [ "String1", "string2"]가 있고 iolist_to_binary / 1을 사용하면 해당 문자열을 새 문자열로 복사합니다. IO 목록이있는 경우 대부분의 경우 출력 할 수 있으며 포트에 연결됩니다. 그리고 이것이 핵심입니다. 런타임은 데이터 복사본을 만들 필요가 없으므로 연결보다 훨씬 효율적입니다.
참고 URL : https://stackoverflow.com/questions/20829348/how-to-join-strings-in-elixir
'development' 카테고리의 다른 글
Visual Studio 2005에서 컴파일 시간이 매우 느림 (0) | 2020.06.29 |
---|---|
마지막 푸시를 Git으로 롤백하는 방법이 있습니까? (0) | 2020.06.29 |
bat 스크립트로 콘솔 출력을 파일로 에코하고 보내려면 어떻게합니까? (0) | 2020.06.29 |
지정된 인덱스에서 ArrayList에 객체 추가 (0) | 2020.06.29 |
키 체인의 배포 인증서에 개인 키가 없습니다. (0) | 2020.06.29 |