2012-05-22 3 views
2

일반적으로 테이블 크기를 가져 오는 데는 표준 테이블 라이브러리 함수 # 연산자가 사용됩니다.문자열 키 인덱스를 사용할 때 lua 테이블 크기가 잘못됨

그러나 문자열 키 인덱스가있는 테이블을 만들면 작동하지 않습니다.

local function addWriterIdListToTable() 

     local returnTable = {} 
     local requestString = "1234:16 5678:8 9012:1" 
     local idList = requestString:split(" ") 
     for i,v in ipairs(idList) do 
       local oneId = v:split(":") 
       returnTable[oneId[1]] = oneId[2] 
     end 

     for k,v in pairs(returnTable) do 
       print (k .. " " .. v) 
     end 
     print("size of table: " .. #returnTable) 

     return returnTable 

end 

문자열을 테이블로 trsnform하고 싶습니다. "split"함수는 문자열을 구문 분석하고 매개 변수를 구분 기호로 분리하여 테이블로 반환합니다.

아래의 기능 실행 결과.

1234 16 
9012 1 
5678 8 
size of table: 0 

정확한 예상 내용을 표시하지만 그 수가 아닙니다.

아무도 도와 줄 수 없습니까?

미리 감사드립니다.

답변

9

# 연산자는 테이블에서 가장 높은 숫자 색인을 알려줍니다. 숫자 인덱스에 간격이 있으면 간격 아래에서 가장 높은 값을 반환 할 수 있습니다. 기본적으로 # 연산자는 조밀 한 배열처럼 테이블을 다루는 경우에만 올바르게 작동합니다.

실제로 테이블에 얼마나 많은 항목이 있는지 알고 싶으면 pairs() 함수를 사용하여 반복하고 몇 개의 항목을 계산해야합니다.

function countTableSize(table) 
    local n = 0 
    for k, v in pairs(table) do 
     n = n + 1 
    end 
    return n 
end 

왜 내가 테이블에 얼마나 많은 항목이 있는지 알 필요가 있는지 궁금합니다. 일반적으로 테이블이 비어 있는지 여부를 신경 써야합니다. 단지 next(table) == nil인지 확인하면됩니다.

+0

친절한 답변을 부탁드립니다. 테이블이 비어 있는지 확인하기 위해 # 연산자를 사용했습니다. 나는 다음 (테이블)을 사용할 것이다. 다시 한 번 감사드립니다. – solikang

관련 문제