Luaで文字列を連結する方法
文字列を連結する(または結合する)最も簡単な方法Lua を使うことですstring concatenation operator , これは2つのピリオドです
表.コンステ
多くの連係操作を実行する必要があるなら、LUAはメモリを再配置して新しい文字列を作成し続ける必要があるので、連結演算子を使用するのは遅くなります.
ダイレクトアプローチ
あなたのユースケースに応じて、いくつかのメモリ使用量を節約することができるかもしれない
..
).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
Reference
この問題について(Luaで文字列を連結する方法), 我々は、より多くの情報をここで見つけました https://dev.to/dguo/how-to-concatenate-strings-in-lua-3haiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol