테이블에서 모든 값을 삭제하고 싶습니다. 자, 어떻게 처리해야하는지 알 수있는 아주 작은 문제가 있습니다.테이블에 지정된 값을 가진 모든 항목을 제거하십시오.
function(list_to_search_in, compared_value, invert)
for k,v in pairs(list_to_search_in) do
if invert and v ~= compared_value then
table.remove(list_to_search_in, v)
if not invert and v == compared_value then
table.remove(list_to_search_in, v)
end
end
end
문제점 :
가의 테이블이{ 1, 2, 3, 2 }
입니다 가정 해 봅시다
이
는 코드입니다. 따라서 루프를 반복하면서 첫 번째 경기를 시작하면 테이블에서 제거됩니다. 이는 값과 키가 삭제되었음을 의미합니다.이제 삭제 된 값의 키가 다음 줄에 할당됩니다. 그러나 스크립트가 다음 키의 값을 검사 할 것이기 때문에이 값 (kay는 방금 변경되었습니다)은 확인되지 않습니다. 제거 후
생각, 간단한
k = k - 1
일을 할 것이지만, 그렇지 않습니다.
v = nil
내가 생각하는 훌륭한 할 것이나, 가비지 컬렉터는 다음 값이 순간에 쌍 반복을 자신의 일을하지 않는 경우에만.
누구나 아이디어가 있습니까? 문제를 해결하는 완성 된 구문에 대한 텍스트 기반 힌트를 선호합니다.
참조 http://stackoverflow.com/questions/12394841/safely-remove-items-from-an-array-table- while-iterating. 특히, 내 대답 http://stackoverflow.com/a/12397742/107090. – lhf
그래서 다른 방법으로 두 번째 테이블을 만들 수 있습니까? 저는 마이크로 컨트롤러에서 lua를 사용하고 있습니다. 게임을 스크립팅하는 것이 아닙니다. 따라서 성능은 나에게 큰 문제입니다. – Sempie
내 대답은 두 번째 테이블을 만들지 않습니다. 삭제할 항목을 표시 한 다음 원본 테이블을 압축합니다. – lhf