2012-03-17 1 views
0

내가 가지고 있다고 가정 해 봅시다.루아에서는 객체가 저장되어있는 키를 찾는 방법

local RockTable = {} 

그리고 나서 20 개의 암석을 생성하고이를 RockTable에 저장하는 for 루프.

table.remove(RockTable, ???)을 사용하여 원하는 특정 바위를 제거하려면 어떻게해야합니까?

Lua의 테이블에서 개체를 제거 할 때 나머지 개체는 인덱스 수를 변경하여 앞으로 이동합니다.

잘 설명해 주셨으면합니다.

도움을 주시면 감사하겠습니다.

답변

1

각 "바위"에는 table.insert 또는 RockTable[#RockTable + 1] 또는 유사한 구문을 사용하여 테이블의 배열 부분에 넣은 것으로 가정 할 때 색인이 있습니다. 해당 색인을 table.remove으로 전달하십시오.

"rocks"에 이름으로 액세스하려면 테이블의 배열 부분에 넣지 마십시오. 그들에 대한 키는 정수가 아니어야합니다. 그들은 문자열 또는 다른 뭔가 있어야합니다. 명명 된 뭔가. "제거"하려면 해당 값을 nil으로 설정하기 만하면됩니다.

--Setting the value: 
RockTable["NameOfRock"] = rock; 

--Removing the value: 
RockTable["NameOfRock"] = nil; 
+0

바위가 3 개인 경우 색인은 1,2,3입니다. 인덱스 2를 제거하면 록 3의 인덱스가 2로 변경되거나 3으로 유지됩니까? – Rico3D

+0

@ Rico3D : 예, 변경됩니다. 그것이 "테이블의 배열 부분"이라고 불리는 이유입니다. 배열에 빈 요소가 없습니다. 배열처럼 작동하지 않으려면 거기에'nil '을 지정해야합니다. 그러나 길이와 다른 배열과 같은 기능을 작동시키지 않을 것입니다. –

+0

바위의 색인을 어떻게 인쇄()하거나 알아 내겠습니까? 예를 들어, 화면에 배열 된 20 개의 무작위 바위를 배열 파트에 스폰 한 경우,이 RockTable [#RockTable + 1] = rock; 은 어떻게 색인에 액세스합니까? 나는'print (rock.index)'를 시도하고'nil '이 나왔다. 제 의견에 사과하고, 해결책을 찾지 못한 채 미친 듯이 끈적 거 렸습니다. – Rico3D