2017-06-12 6 views
0

テーブルの中にある値の量を取得するにはどうすればよいですか?テーブル内の値の量を取得する方法[Lua]

TableExaple = { 
Red 
Blue 
Green 
} 

この場合、3の値はどのように得られますか?

+3

[Luaテーブルのエントリ数を取得するにはどうすればいいですか?](https://stackoverflow.com/questions/2705793/how-to-get-number-of-entries-in-a- lua-table) – Minzkraut

+0

与えられたコードは有効なLuaコードではありません。 – lhf

答えて

0

この簡単な例では、単にlength演算子#を使用できます。長さ演算子は特殊なケースで動作したよう

あなたは、テーブル内のギャップまたは任意の非数字キーを持っている場合は、

local count = 0 
for k,v in pairs(myTable) do 
    count = count + 1 
end 

のようなものを使用する必要があります。

詳細Luaのリファレンスマニュアルを参照してください:テーブル上に塗布 https://www.lua.org/manual/5.3/manual.html#3.4.7

長オペレータは、そのテーブル内の境界を返します。テーブルTの 境界は、以下の条件を満足する任意の自然数である。

(border == 0 or t[border] ~= nil) and t[border + 1] == nil In words, a border is any (natural) index in a table where a non-nil 

値がゼロ値が続く(またはインデックス1がゼロであるゼロ)されます。

境界線が1つの表をシーケンスといいます。例えば、テーブルは、 のborder(5)しかないので、テーブル{10,20,30,40,50}はシーケンスです。テーブル{10,20,30、nil、50}は2つのボーダー(3と5)、 を持っているため、シーケンスではありません。テーブル{nil、20、30、nil、nil、 60、nil}は3つの境界線(0,3、および6)を持つため、シーケンスではありません。 もあります。テーブル{}は、境界0のシーケンスです。非自然の キーは、テーブルがシーケンスであるかどうかを妨げません。

tがシーケンスである場合、#tはその唯一の境界線を返します。これは に対応し、シーケンスの長さの直感的な概念です。 tが シーケンスでない場合、#tはその境界線を返すことができます。 (正確な一つは順番に テーブルが移入された方法に依存することができ、その 非数値キーのメモリアドレスれ、テーブルの内部表現の 詳細に依存する。)

長さの計算テーブルの最悪保証時間はO(log n)の であり、nはテーブル内の最大の自然キーです。

プログラムはlength演算子の動作を任意の値 に変更できますが、__lenメタメソッド(§2.4を参照)で文字列を変更できます。

関連する問題