Luaで文字列を連結する方法


文字列を連結する(または結合する)最も簡単な方法Lua を使うことですstring concatenation operator , これは2つのピリオドです.. ).
message = "Hello, " .. "world!"
-- message equals "Hello, World!"
数字は文字列に強制されます.数の書式設定を細かく制御するためにstring.format , これはほとんどCのように振る舞いますprintf .
count = 42
message = "The count is: " .. count
-- message equals "The count is: 42"
他の結合を試みるtypes , NILかテーブルのように、エラーになるでしょう.
count = nil
message = "The count is: " .. count
-- results in an "attempt to concatenate a nil value" error
ルアーに注意doesn't have 用砂糖augmented assignment . 以下は無効な構文です.
message = "Hello, "
message ..= "world!"
-- results in a "syntax error near '..'" error
Luaの文字列はimmutable , では連結結果(message この例では、新しい文字列です.
start = "Hello, "
message = start .. "world!"
start = "Bye, "
-- message still equals "Hello, World!"

表.コンステ
多くの連係操作を実行する必要があるなら、LUAはメモリを再配置して新しい文字列を作成し続ける必要があるので、連結演算子を使用するのは遅くなります.
message = ""
for i=1,100000 do
  message = message .. i
end
その結果、それcan be much faster 使うtable.concat .
numbers = {}
for i=1,100000 do
  numbers[i] = i
end
message = table.concat(numbers)
以下はベンチマーク比較ですhyperfine ) 走ることから.. 例としてslow.lua そしてtable.concat 例としてfast.lua .
hyperfine 'lua slow.lua'
# Benchmark #1: lua slow.lua
#   Time (mean ± σ):      1.287 s ±  0.115 s    [User: 1.120 s, System: 0.078 s]
#   Range (min … max):    1.187 s …  1.528 s    10 runs
hyperfine 'lua fast.lua'
# Benchmark #1: lua fast.lua
#   Time (mean ± σ):      39.3 ms ±   3.8 ms    [User: 34.6 ms, System: 2.8 ms]
#   Range (min … max):    35.3 ms …  58.3 ms    48 runs
違いはおそらくほとんどの場合問題ではないが、それは良い最適化を意識することです.table.concat 要素間のセパレータ引数を取ることができるので、使いやすくなります.
message = table.concat({1, 2, 3, 4, 5})
-- message equals "12345"
message = table.concat({1, 2, 3, 4, 5}, ", ")
-- message equals "1, 2, 3, 4, 5"
また、開始および終了インデックスを取ることができます.Lua配列を念頭に置いてくださいstart with index 1 .
message = table.concat({1, 2, 3, 4, 5}, ", ", 2, 4)
-- message equals "2, 3, 4"

ダイレクトアプローチ
あなたのユースケースに応じて、いくつかのメモリ使用量を節約することができるかもしれないtable.concat 結果を直接生成します.
for i=1,100000 do
  io.stdout:write(i)
end