루아 테이블에서 항목 수를 얻는 방법은 무엇입니까?
"Google에 알려주세요"라는 질문처럼 들리지만 어떻게 든 답을 찾을 수 없습니다. Lua #
연산자는 정수 키가있는 항목 만 계산하므로 table.getn
다음 과 같습니다.
tbl = {}
tbl["test"] = 47
tbl[1] = 48
print(#tbl, table.getn(tbl)) -- prints "1 1"
count = 0
for _ in pairs(tbl) do count = count + 1 end
print(count) -- prints "2"
항목을 세지 않고 모든 항목 수를 얻으려면 어떻게합니까 ?
당신은 이미 문제에 대한 해결책을 가지고 있습니다-유일한 방법은 전체 테이블을 반복하는 것입니다 pairs(..)
.
function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
또한 "#"연산자의 정의는 그보다 약간 더 복잡합니다. 이 표를 통해이를 설명해 드리겠습니다.
t = {1,2,3}
t[5] = 1
t[9] = 1
매뉴얼에 따라 임의의 3, 5, 9의 결과는 유효하다 #t
. 그것을 사용하는 유일한 방법은 nil 값이없는 하나의 인접한 부분의 배열입니다.
항목 수를 추적하기 위해 메타 테이블을 설정할 수 있습니다.이 정보가 자주 필요한 경우 반복보다 빠를 수 있습니다.
한 가지 방법이 있지만 실망 스러울 수 있습니다. 카운트를 저장하기 위해 추가 변수 (또는 테이블 필드 중 하나)를 사용하고 삽입 할 때마다 증가시킵니다.
count = 0
tbl = {}
tbl["test"] = 47
count = count + 1
tbl[1] = 48
count = count + 1
print(count) -- prints "2"
다른 방법은 없습니다. # 연산자는 연속 키가있는 배열 형 테이블에서만 작동합니다.
펜 라이트 라이브러리를 사용할 수 있습니다 . size
테이블의 실제 크기를 제공 하는 기능이 있습니다 .
Lua에서 프로그래밍하고 누락하는 동안 필요할 수있는 많은 기능을 구현했습니다.
다음은이를 사용하기위한 샘플입니다.
> tablex = require "pl.tablex"
> a = {}
> a[2] = 2
> a[3] = 3
> a['blah'] = 24
> #a
0
> tablex.size(a)
3
local function CountedTable(x)
assert(type(x) == 'table', 'bad parameter #1: must be table')
local new_t = {}
local mt = {}
-- `all` will represent the number of both
local all = 0
for k, v in pairs(x) do
all = all + 1
end
mt.__newindex = function(t, k, v)
if v == nil then
if rawget(x, k) ~= nil then
all = all - 1
end
else
if rawget(x, k) == nil then
all = all + 1
end
end
rawset(x, k, v)
end
mt.__index = function(t, k)
if k == 'totalCount' then return all
else return rawget(x, k) end
end
return setmetatable(new_t, mt)
end
local bar = CountedTable { x = 23, y = 43, z = 334, [true] = true }
assert(bar.totalCount == 4)
assert(bar.x == 23)
bar.x = nil
assert(bar.totalCount == 3)
bar.x = nil
assert(bar.totalCount == 3)
bar.x = 24
bar.x = 25
assert(bar.x == 25)
assert(bar.totalCount == 4)
테이블의 항목 수를 얻는 가장 쉬운 방법은 '#'입니다. #tableName은 번호가 매겨진 항목 수를 가져옵니다.
tbl={
[1]
[2]
[3]
[4]
[5]
}
print(#tbl)--prints the highest number in the table: 5
Sadly, if they are not numbered, it won't work.
seems when the elements of the table is added by insert method, getn will return correctly. Otherwise, we have to count all elements
mytable = {}
element1 = {version = 1.1}
element2 = {version = 1.2}
table.insert(mytable, element1)
table.insert(mytable, element2)
print(table.getn(mytable))
It will print 2 correctly
참고URL : https://stackoverflow.com/questions/2705793/how-to-get-number-of-entries-in-a-lua-table
'Programming' 카테고리의 다른 글
`.gitattributes` 파일에서`text = auto`의 목적은 무엇입니까? (0) | 2020.07.17 |
---|---|
Uncaught SyntaxError : 블록 범위 선언 (let, const, function, class)은 아직 엄격 모드 외부에서 지원되지 않습니다. (0) | 2020.07.17 |
렌더링 시간 및 성능 측면에서 패널은 어떤 순서로 가장 효율적입니까? (0) | 2020.07.17 |
POST 데이터를 URL 인코딩해야합니까? (0) | 2020.07.17 |
list.clear () vs list = 새 ArrayList (0) | 2020.07.17 |