lua--关于#符号的使用问题

一、主要作用

1. 获取字符串的长度

local str = "Test";
print(#str);  -- 输出结果: 5

2. 获取一个数值键值(从键值1开始)的表(table)长度

-- 数值键值表
local t1 = {
  "a", "b", "c",
};
print(#t1);  -- 输出结果: 3

local t2 = {
  [0] = "000",
  [1] = "a",
  [2] = "b",
  [3] = "c",
};
print(#t2);  -- 输出结果: 3
-- 非完全数值键值表
local t3 = {
  [1] = "000",  -- 数值键值
  a = "a",
  b = "b",
  c = "c",
};
print(#t3);  -- 输出结果: 1

二、注意事项

1. 当所获取的table中存在nil时,#返回的数值是无意义的。

<1> 初始化中包含nil值的情况

(1) 当初始化table时,数值键值首部包含nil值:

local t1 = {
  nil, "a", "b", nil, "c",
};
print(#t1);  -- 输出结果: 5

(2) 当初始化table时,数值键值中间包含nil值:

local t2 = {
  "a", "b", nil, nil, "c",
};
print(#t2);  -- 输出结果: 5

(3) 当初始化table时,数值键值首部和中间包含nil值:

local t3 = {
  nil, "a", "b", nil, "c",
};
print(#t3);  -- 输出结果: 5

(4) 当初始化table时,数值键值中间和尾部包含nil值:

local t4 = {
  "a", "b", nil, "c", nil,
};
print(#t4);  -- 输出结果: 2

(5) 当初始化table时,数值键值首部、中间和尾部包含nil值:

local t5 = {
  nil, "a", "b", nil, "c", nil,
};
print(#t5);  -- 输出结果: 3

<2> 直接将table中的某个键值,置为nil值的情况

(1) 当初始化table为空{}时,设置数值键值包含nil值:

local t1 = {};
t1[1] = nil;
t1[2] = "a";
t1[3] = "b";
print(#t1);  -- 输出结果: 0

local t2 = {};
t2[1] = "a";
t2[2] = nil;
t2[3] = "b";
print(#t2);  -- 输出结果: 1

local t3 = {};
t3[1] = "a";
t3[2] = nil;
t3[3] = "b";
t3[4] = "c";
print(#t3);  -- 输出结果: 4

local t4 = {};
t4[1] = "a";
t4[2] = "b";
t4[3] = nil;
print(#t4);  -- 输出结果: 2

(2) 当初始化table时,其中的数值键值长度<所要手动设置的值的长度:

local t1 = {1,  2,  3};
t1[1] = nil;
t1[2] = "a";
t1[3] = "b";
t1[4] = "c";
print(#t1);  -- 输出结果: 4

local t2 = {1,  2,  3};
t2[1] = "a";
t2[2] = nil;
t2[3] = "b";
t2[4] = "c";
print(#t2);  -- 输出结果: 4

(3) 当初始化table时,其中的数值键值长度=所要手动设置的值的长度:

local t1 = {1,  2,  3, 4};
t1[1] = nil;
t1[2] = "a";
t1[3] = "b";
t1[4] = "c";
print(#t1);  -- 输出结果: 4

local t2 = {1,  2,  3, 4};
t2[1] = "a";
t2[2] = "b";
t2[3] = nil;
t2[4] = "c";
print(#t2);  -- 输出结果: 4

local t3 = {1,  2,  3, 4};
t3[1] = "a";
t3[2] = "b";
t3[3] = "c";
t3[4] = nil;
print(#t3);  -- 输出结果: 3

local t4 = {1,  2,  3, 4};
t4[1] = "a";
t4[2] = nil;
t4[3] = "b";
t4[4] = nil;
print(#t4);  -- 输出结果: 1

local t5 = {1,  2,  3, 4};
t5[1] = nil;
t5[2] = "a";
t5[3] = "b";
t5[4] = nil;
print(#t5);  -- 输出结果: 3

(4) 当初始化table时,其中的数值键值长度>所要手动设置的值的长度:

local t1 = {1,  2,  3, 4, 5};
t1[1] = nil;
t1[2] = nil;
t1[3] = nil;
t1[4] = nil;
print(#t1);  -- 输出结果: 5

你可能感兴趣的:(lua--关于#符号的使用问题)