테이블 엔트리 인덱스를 얻을 수 없습니다. 테이블에서 항목을 제거해야합니다.테이블 엔트리 인덱스 얻기
나는 table.insert
을 사용하여 테이블에 항목을 추가합니다.
또 다른 질문 : 왜 Lua는 table.remove 기능을 "오버로드"하지 않아 연관 색인으로 항목을 제거 할 수 있습니까?
테이블 엔트리 인덱스를 얻을 수 없습니다. 테이블에서 항목을 제거해야합니다.테이블 엔트리 인덱스 얻기
나는 table.insert
을 사용하여 테이블에 항목을 추가합니다.
또 다른 질문 : 왜 Lua는 table.remove 기능을 "오버로드"하지 않아 연관 색인으로 항목을 제거 할 수 있습니까?
t[k]=nil
은 t
에서 k
의 항목을 제거합니다.
두 번째 질문에 대한 대답은 테이블에 개별 메타 테이블을 포함 할 수 있다는 것입니다.
테이블은 키와 값 사이의 순서가없는 일대 다 관계를 구현합니다. 즉, 특정 키 (색인)는 표에 한 번만 나타날 수 있지만 값은 여러 번 나타날 수 있습니다.
k
키를 알고있는 경우 t[k] = nil
키와 키 값을 테이블에서 제거합니다. 그러나이 작업은 테이블의 다른 키 또는 값에 영향을 미치지 않습니다.
table.insert
및 table.remove
함수는 배열 또는 목록을 구현하기 위해 규칙에 따라 사용되는 1부터 시작하는 순차 정수 키 집합을 통해 작동합니다. 그 목적을 위해 그들은 목록의 다른 값을 조작하여 목록을 개발 홀에서 보호합니다.
값이있는 키를 찾는 한 가지 방법은 단순히 테이블을 검색하는 것입니다. 이 작업이 두 번 이상 수행되는 경우 키/값 쌍을 반전하는 두 번째 테이블을 작성하여 값 별 조회가 색인 별 조회만큼 빠르도록하는 것이 좋습니다.
적합한 구현 방법은 가정과 필요에 따라 다릅니다. 일부 샘플은 다음과 같습니다.
-- return the first integer index holding the value
function AnIndexOf(t,val)
for k,v in ipairs(t) do
if v == val then return k end
end
end
-- return any key holding the value
function AKeyOf(t,val)
for k,v in pairs(t) do
if v == val then return k end
end
end
-- return all keys holding the value
function AllKeysOf(t,val)
local s={}
for k,v in pairs(t) do
if v == val then s[#s+1] = k end
end
return s
end
-- invert a table so that each value is the key holding one key to that value
-- in the original table.
function Invert(t)
local i={}
for k,v in pairs(t) do
i[v] = k
end
return i
end
감사합니다. 키/값 반전 접근법에 대한 다른 설명이 있으므로, "얻으실 수있는"유일한 방법은 귀하뿐입니다. 잘 했어. –
예, 그렇지만 왜 C# 또는 Java 에서처럼 IndexOf가 없습니까? – mnn