모듈:테이블 도구
Module| 이 Lua 모듈은 시스템 메시지 및 약 5,740,000 페이지, 즉 전체 페이지의 약 10%에 사용됩니다. 변경하면 Wikipedia 사용자 인터페이스가 즉시 변경될 수 있습니다. 큰 중단과 서버 로드를 방지하려면 모듈의 /sandbox 또는 /testcase 하위 페이지 또는 자체 모듈 샌드박스에서 변경 사항을 테스트해야 합니다.테스트된 변경 사항은 한 번의 편집으로 이 페이지에 추가할 수 있습니다.변경 사항을 구현하기 전에 대화 페이지에서 변경 사항에 대해 논의하십시오. |
| 이 모듈은 페이지 보호 대상입니다.매우 많은 페이지에서 사용 중이거나 매우 자주 교체되는 가시성이 높은 모듈입니다.파괴 행위나 실수는 많은 페이지에 영향을 미치고 사소한 편집도 서버에 상당한 부하를 줄 수 있으므로 편집으로부터 보호됩니다. |
| 이 모듈은 다음과 같은 다른 모듈에 따라 달라집니다. |
이 모듈에는 Lua 테이블을 처리하기 위한 다양한 기능이 포함되어 있습니다.다른 Lua 모듈에서 호출되는 메타 모듈이며 #invoke에서 직접 호출하면 안 됩니다.
모듈 로드
기능을 사용하려면 먼저 모듈을 로드해야 합니다.
현지의 테이블 도구 = 요구하다('모듈:테이블 도구') 양의 정수입니다.
테이블 도구.양의 정수입니다.(가치) 돌아온다true한다면value는 양의 정수이며,false아니라면.테이블에서 작동하지는 않지만 주어진 테이블 키가 테이블의 배열 부분에 있는지 해시 부분에 있는지 확인하는 데 유용하기 때문에 여기에 포함됩니다.
아이즈난
테이블 도구.아이즈난(가치) 돌아온다true한다면value는 NaN 값입니다.false아니라면.테이블에서 작동하지 않지만, 값이 유효한 테이블 키가 될 수 있는지 여부를 판단하는 데 유용하기 때문에 여기에 포함됩니다. (NaN 값을 테이블 키로 사용하면 Lua가 오류를 생성합니다.)
얕은 클론
테이블 도구.얕은 클론(t) 테이블의 복제본을 반환합니다.반환되는 값은 새 테이블이지만 모든 하위 테이블 및 함수가 공유됩니다.메타메소드는 존중되지만 반환된 테이블에는 메타메소드가 없습니다.공유 하위 테이블이 없고 메타 테이블이 전송된 새 테이블을 만들려면mw.clone대신.공유 하위 테이블이 없고 메타 테이블이 전송되지 않은 새 테이블을 만들려면deepCopy와 함께noMetatable선택.
제거중복
테이블 도구.제거중복(t) 배열에서 중복 값을 제거합니다.이 함수는 표준 배열에서만 작동하도록 설계되었습니다. 양의 정수가 아닌 키는 첫 번째 이후의 모든 값과 마찬가지로 무시됩니다.nilvalue. (다음을 포함하는 배열의 경우)nil값, 사용할 수 있습니다.compressSparseArray첫째.)함수는 배열 순서를 보존하려고 합니다. 가장 빠른 고유하지 않은 값이 유지되고 이후의 모든 중복 값이 제거됩니다.예를 들어, 표의 경우{5, 4, 4, 3, 4, 2, 2, 1} removeDuplicates돌아올 것입니다{5, 4, 3, 2, 1}.
numKeys
테이블 도구.numKeys(t) 테이블을 차지합니다.t그리고 숫자 순서로 정렬된 정수가 아닌 값을 가진 양의 정수 키의 숫자를 포함하는 배열을 반환합니다.예를 들어, 표의 경우{'foo', nil, 'bar', 'baz', a = 'b'},numKeys돌아올 것입니다{1, 3, 4}.
숫자를 붙입니다.
테이블 도구.숫자를 붙입니다.(t, 접두어, 접미사) 테이블을 차지합니다.t선택적 접두사가 있는 키 수를 포함하는 배열을 반환합니다.prefix및 선택적 접미사suffix예를 들어, 표의 경우{a1 = 'foo', a3 = 'bar', a6 = 'baz'}및 접두어'a',affixNums돌아올 것입니다{1, 3, 6}모든 문자prefix그리고.suffix문자 그대로 해석됩니다.
numData
테이블 도구.numData(t, 압축하다.) 다음과 같은 키가 있는 테이블이 주어지면,"foo1","bar1","foo2",그리고."baz2"하위 테이블 형식의 테이블을 반환합니다.{ [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} }정수로 끝나지 않는 키는 이름이 지정된 하위 테이블에 저장됩니다."other"compress 옵션은 테이블을 압축하여 다음과 같이 반복할 수 있도록 합니다.ipairs.
압축희소어레이
테이블 도구.압축희소어레이(t) 배열을 사용합니다.t하나 이상의 nil 값으로 배열을 안전하게 이동할 수 있도록 순서를 유지하는 동안 nil 값을 제거합니다.ipairs양의 정수가 아닌 키는 모두 제거됩니다.예를 들어, 표의 경우{1, nil, foo = 'bar', 3, 2},compressSparseArray돌아올 것입니다{1, 3, 2}.
sparseIpairs
테이블 도구.sparseIpairs(t) 이것은 희소 배열을 통과하기 위한 반복기 함수입니다.t와 유사합니다.ipairs하지만 가장 높은 숫자 키까지 계속 반복할 것이다, 반면에.ipairs첫 번째 이후에 멈출 수 있습니다.nil값. 양의 정수가 아닌 모든 키는 무시됩니다.
보통sparseIpairs일반적으로 사용됩니다.for고리.
위해서 i, v 에 테이블 도구.sparseIpairs(t) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 코드 블록 끝. 참고:sparseIpairs를 사용합니다.pairs기능을 수행할 수 있습니다.일부 테이블 키는 무시되는 것처럼 보이지만 모든 테이블 키는 실행될 때 액세스됩니다.
크기
테이블 도구.크기(t) 키/값 쌍 테이블의 크기를 찾습니다.예를 들어, 표의 경우{foo = 'foo', bar = 'bar'},size돌아올 것입니다2이 기능은 어레이에서도 작동하지만 어레이의 경우에는#교환입니다.테이블 크기를 찾기 위해 이 함수는 다음을 사용합니다.pairs모든 테이블 키를 반복할 수 있습니다.
키목록
테이블 도구.키목록(t, 키소트, 확인했다) 기본 비교 함수 또는 사용자 정의를 사용하여 정렬된 테이블의 키 목록을 반환합니다.keySort함수, 이것은 다음과 같은 규칙을 따릅니다.comp에 공급되는 기능.table.sort.한다면keySort이라false정렬이 수행되지 않습니다.checked로.true내부 유형 검사를 건너뜁니다.
정렬된 쌍
테이블 도구.정렬된 쌍(t, 키소트) 키를 사용하여 정렬된 상태에서 테이블을 반복합니다.keysToList기능.숫자 키만 있다면,sparseIpairs아마도 더 효율적일 것입니다.
isArray
테이블 도구.isArray(가치) 돌아온다true한다면value는 테이블이며 모든 키는 1로 시작하는 연속 정수입니다.
isArray Like
테이블 도구.isArray Like(가치) 돌아온다true한다면value반복 가능하며 모든 키는 1부터 시작하는 연속 정수입니다.
뒤집다
테이블 도구.뒤집다(아어) 배열에서 키와 값을 바꿉니다.예를들면,invert{ "a", "b", "c" }수확량{ a=1, b=2, c=3 }.
listToSet
테이블 도구.listToSet(아어) 테이블의 배열 부분에서 집합을 작성합니다arr배열 값으로 집합 인덱싱 반환true.예를들면,listToSet{ "a", "b", "c" }수확량{ a=true, b=true, c=true }모듈 참조:Lua는 집합을 만드는 고급 방법을 설정합니다.
deepCopy
테이블 도구.deepCopy(기원, 서식 없음, 이미 확인됨) 테이블의 복사본을 만듭니다.orig와 마찬가지로mw.clone함수가 아닌 모든 값이 중복되고 테이블의 ID가 보존됩니다.noMetatable이라true그러면 메타테이블(있는 경우)이 복사되지 않습니다.로드된 테이블을 복사할 수 있습니다.mw.loadData.
와 유사한mw.clone,그렇지만mw.clone로드된 테이블을 복사할 수 없습니다.mw.loadData메타테이블 복사를 허용하지 않습니다.
드문드문한 콩캣
테이블 도구.드문드문한 콩캣(t, 셉, i, j) 양의 정수로 인덱싱된 테이블의 모든 값을 순서대로 연결합니다.예를들면,sparseConcat{ "a", nil, "c", "d" }수확량"acd"그리고.sparseConcat{ nil, "b", "c", "d" }수확량"bcd".
길이
테이블 도구.길이(t, 접두어) 배열 또는 선택적 키가 있는 준 배열의 길이를 찾습니다.prefix예를 들어 "data1", "data2" 등입니다.지수 검색 알고리즘을 사용하여 가능한 한 적은 수의 테이블 검색을 사용하도록 길이를 찾습니다.
이 알고리즘은 메타테이블(예: frame.args)을 사용하는 배열과 유사 배열에 유용합니다.일반 배열의 경우 C에서 구현되므로 # 연산자를 사용하면 더 빠릅니다.
일렬로
테이블 도구.일렬로(아어, 찾을 값) 돌아온다true한다면valueToFind어레이의 멤버입니다.arr,그리고.false그렇지않으면.
------------------------------------------------------------------------------------ 테이블 도구 -- -- -- 이 모듈에는 Lua 테이블을 처리하기 위한 다양한 기능이 포함되어 있습니다. -- 이것은 메타 모듈이며, 다른 루아 모듈에서 호출되어야 하며, 그러면 안 됩니다. #dll에서 직접 호출됩니다. -- ------------------------------------------------------------------------------------ 현지의 라이브러리유틸 = 요구하다('라이브러리유틸') 현지의 p = {} 자주 사용되는 변수와 함수를 정의합니다. 현지의 바닥. = 수학.플로어 현지의 무한한 = 수학, 수학,수학 현지의 checkType = 라이브러리유틸.checkType 현지의 검사 유형 다중 = 라이브러리유틸.검사 유형 다중 ------------------------------------------------------------------------------------ 양의 정수입니다. -- 이 함수는 지정된 값이 양의 정수이면 true를 반환하고 false를 반환합니다. 그렇지 않다면테이블에서 작동하지는 않지만, 여기에 그대로 포함되어 있습니다. 주어진 테이블 키가 배열 부분에 있는지 또는 배열 부분에 있는지 결정하는 데 유용합니다. 테이블의 일부를 해시합니다. ------------------------------------------------------------------------------------ 기능. p.양의 정수입니다.(v) 돌아가다 유형(v) == '숫자' 그리고. v >= 1 그리고. 바닥.(v) == v 그리고. v < 무한한 끝. ------------------------------------------------------------------------------------ 아이즈난 -- 이 함수는 지정된 숫자가 NaN 값이면 true를 반환하고, 다음 값이면 false를 반환합니다. 아닙니다. 테이블에서 작동하지 않지만 유용하기 때문에 여기에 포함되어 있습니다. 값이 유효한 테이블 키가 될 수 있는지 여부를 결정합니다.Lua는 다음을 생성합니다. 테이블 키로 NaN을 사용하는 경우 오류가 발생합니다. ------------------------------------------------------------------------------------ 기능. p.아이즈난(v) 돌아가다 유형(v) == '숫자' 그리고. v ~= v 끝. ------------------------------------------------------------------------------------ 얕은 클론 -- 테이블의 복제본을 반환합니다.반환된 값은 새 테이블이지만 모두 하위 테이블 및 함수가 공유됩니다.메타 메소드는 존중되지만 반환되는 것은 테이블에 자체 메타테이블이 없습니다. ------------------------------------------------------------------------------------ 기능. p.얕은 클론(t) checkType('낮은 클론', 1, t, '탁자') 현지의 리트 = {} 위해서 k, v 에 쌍들(t) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 리트[k] = v 끝. 돌아가다 리트 끝. ------------------------------------------------------------------------------------ 제거중복 -- 이렇게 하면 배열에서 중복 값이 제거됩니다.양의 정수가 아닌 키는 무시된가장 빠른 값이 유지되고 이후의 모든 중복 값은 제거되었지만 그렇지 않으면 배열 순서가 변경되지 않습니다. ------------------------------------------------------------------------------------ 기능. p.제거중복(아어) checkType('중복 제거', 1, 아어, '탁자') 현지의 아이즈난 = p.아이즈난 현지의 리트, 존재한다 = {}, {} 위해서 _, v 에 짝을 짓다(아어) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 아이즈난(v) 그리고나서 NaN은 테이블 키가 될 수 없고, 또한 고유하기 때문에 존재 여부를 확인할 필요가 없습니다. 리트[#리트 + 1] = v 또 다른 한다면 것은 아니다. 존재한다[v] 그리고나서 리트[#리트 + 1] = v 존재한다[v] = 진실의 끝. 끝. 끝. 돌아가다 리트 끝. ------------------------------------------------------------------------------------ numKeys -- 테이블을 사용하고 임의의 숫자를 포함하는 배열을 반환합니다. 숫자 순서로 정렬된 값이 아닌 키입니다. ------------------------------------------------------------------------------------ 기능. p.numKeys(t) checkType('numKeys', 1, t, '탁자') 현지의 양의 정수입니다. = p.양의 정수입니다. 현지의 숫자들 = {} 위해서 k 에 쌍들(t) 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다 한다면 양의 정수입니다.(k) 그리고나서 숫자들[#숫자들 + 1] = k 끝. 끝. 테이블. 테이블.(숫자들) 돌아가다 숫자들 끝. ------------------------------------------------------------------------------------ 숫자를 붙입니다. -- 테이블을 사용하고 키 수를 포함하는 배열을 반환합니다. 지정된 접두사 및 접미사.예를 들어, 표의 경우 {a1 = 'foo', a3 = 'bar', a6 = 'baz'} 및 접두사 "a", prefixNums가 반환됩니다. -- {1, 3, 6}. ------------------------------------------------------------------------------------ 기능. p.숫자를 붙입니다.(t, 접두어, 접미사) checkType('affixNums', 1, t, '탁자') checkType('affixNums', 2, 접두어, '끈', 진실의) checkType('affixNums', 3, 접미사, '끈', 진실의) 현지의 기능. 깨끗한 패턴(s) 마법 문자()%가 되도록 패턴을 청소합니다.[]*+-?^$는 문자 그대로 해석됩니다. 돌아가다 s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') 끝. 접두어 = 접두어 또는 '' 접미사 = 접미사 또는 '' 접두어 = 깨끗한 패턴(접두어) 접미사 = 깨끗한 패턴(접미사) 현지의 양식 = '^' .. 접두어 .. '([1-9]%d*)' .. 접미사 .. '