모듈:표 도구/샌드박스
Module| 모듈 샌드박스 페이지는 다음과 같습니다.테이블 도구(diff). 테스트 케이스에 대해서는, 부속의 서브 페이지도 참조해 주세요(실행). |
| 이 Lua 모듈은 시스템메시지에 사용됩니다. 이를 변경하면 Wikipedia 사용자 인터페이스가 즉시 변경될 수 있습니다. 중대한 중단을 방지하려면 모듈의 /sandbox 또는 /testcase 서브페이지 또는 자체 모듈 샌드박스에서 변경 사항을 테스트해야 합니다.테스트한 변경은 한 번의 편집으로 이 페이지에 추가할 수 있습니다.토크 페이지에서 변경 사항을 논의한 후 구현하십시오. |
| 이 모듈은 페이지 보호 대상입니다.이 모듈은 매우 많은 페이지에서 사용 중이거나 매우 자주 교체됩니다.파손이나 실수는 많은 페이지에 영향을 미치고 사소한 편집이라도 서버에 큰 부하가 걸릴 수 있으므로 편집으로부터 보호됩니다. |
| 이 모듈은 다음 다른 모듈에 의존합니다. |
이 모듈에는 Lua 테이블을 처리하기 위한 여러 기능이 포함되어 있습니다.이것은 메타 모듈로 다른 Lua 모듈에서 호출하는 것을 의미하며 #invoke에서 직접 호출해서는 안 됩니다.
모듈 로드
기능을 사용하려면 먼저 모듈을 로드해야 합니다.
현지의 표 도구 = 요구하다('모듈:테이블 도구') isPositiveInteger
표 도구.isPositiveInteger(가치) 돌아온다true한다면value양의 정수입니다.false아니라면.테이블에서는 동작하지 않지만 특정 테이블 키가 테이블의 배열 부분에 있는지 해시 부분에 있는지 판별하는 데 유용하기 때문에 여기에 포함되어 있습니다.
Nan
표 도구.Nan(가치) 돌아온다true한다면valueNaN 값입니다.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}.
숫자 키
표 도구.숫자 키(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.
compressSparseArray
표 도구.compressSparseArray(t) 어레이를 사용t1개 이상의 0 값을 사용하여 순서를 유지하면서 0 값을 삭제함으로써 어레이를 안전하게 통과할 수 있도록 합니다.ipairs. 양의 정수가 아닌 키는 모두 삭제됩니다.예를 들어 테이블의 경우{1, nil, foo = 'bar', 3, 2},compressSparseArray돌아온다{1, 3, 2}.
스파스아이페어
표 도구.스파스아이페어(t) 이것은 스파스 어레이를 통과하기 위한 반복 함수입니다.t와 비슷합니다.ipairs단, 가장 높은 숫자 키까지 반복됩니다.ipairs첫 번째가 지나면 멈출지도 모른다nilvalue. 양의 정수가 아닌 키는 무시됩니다.
보통sparseIpairs범용으로 사용됩니다.for고리.
위해서 i, v 에 표 도구.스파스아이페어(t) 니 -- 코드 블록 끝. 주의:sparseIpairs를 사용합니다.pairs기능을 합니다.일부 테이블 키는 무시되는 것처럼 보이지만 실행 시 모든 테이블 키에 액세스합니다.
크기
표 도구.크기(t) 키/값 쌍 테이블의 크기를 찾습니다.예를 들어 테이블의 경우{foo = 'foo', bar = 'bar'},size돌아온다2이 기능은 어레이에서도 사용할 수 있지만 어레이의 경우,#교환입니다.테이블 크기를 검색하려면 이 함수는pairs모든 테이블 키를 반복하는 기능을 수행합니다.
Keys To List(키 투 리스트)
표 도구.Keys To List(키 투 리스트)(t, 키 정렬, 확인했다) 기본 비교 함수 또는 사용자 정의를 사용하여 정렬된 테이블의 키 목록을 반환합니다.keySortfunction(기능) : function function 、 function function function ascomp공급되는 기능table.sort.한다면keySort이false, 정렬은 이루어지지 않습니다.세트checked로.true내부 유형 확인을 건너뜁니다.
정렬 페어
표 도구.정렬 페어(t, 키 정렬) 키를 정렬하여 테이블을 반복합니다.keysToList기능.숫자 키만 있으면sparseIpairs아마 더 효율적일 겁니다.
어레이
표 도구.어레이(가치) 돌아온다true한다면value는 테이블이며 모든 키는 1부터 시작하는 연속된 정수입니다.
어레이라이크
표 도구.어레이라이크(가치) 돌아온다true한다면value는 반복 가능하며 모든 키는 1부터 시작하는 연속된 정수입니다.
뒤집다
표 도구.뒤집다(arr) 배열의 키와 값을 바꿉니다.예를들면,invert{ "a", "b", "c" }수율{ a=1, b=2, c=3 }.
list To Set(목록 설정)
표 도구.list To Set(목록 설정)(arr) 테이블의 배열 부분에서 세트를 작성합니다.arr. 어레이 값 중 하나로 세트를 인덱싱하면 반환됩니다.true.예를들면,listToSet{ "a", "b", "c" }수율{ a=true, b=true, c=true }. "모듈"도 참조해 주세요.Lua는 세트를 만드는 고급 방법을 설정했습니다.
딥 카피
표 도구.딥 카피(발생하다, 측정할 수 없다, 이미 본) 테이블의 복사본을 만듭니다.orig와 마찬가지로mw.clone함수가 아닌 값은 모두 복제되며 테이블의 ID는 유지됩니다.한다면noMetatable이truemetable(있는 경우)은 복사되지 않습니다.로딩된 테이블을 복사할 수 있습니다.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에 구현되어 있어 더 빠릅니다.
어레이 내
표 도구.어레이 내(arr, value To Find(값 검색)) 돌아온다true한다면valueToFind어레이의 멤버입니다.arr,그리고.false그렇지않으면.
------------------------------------------------------------------------------------ -- TableTools -- -- -- -- 이 모듈에는 Lua 테이블을 처리하기 위한 여러 기능이 포함되어 있습니다. -- -- 이것은 메타 모듈이며, 다른 Lua 모듈에서 호출되도록 되어 있습니다. --#call에서 직접 호출됩니다. -- ------------------------------------------------------------------------------------ 현지의 라이브러리 Util = 요구하다('라이브러리 유틸') 현지의 p = {} -- 자주 사용하는 변수와 함수를 정의합니다. 현지의 바닥. = math.floor 현지의 무궁무한 = math.matrix 현지의 체크 타입 = 라이브러리 Util.체크 타입 현지의 check Type Multi(다중 체크 타입) = 라이브러리 Util.check Type Multi(다중 체크 타입) ------------------------------------------------------------------------------------ -- is Positive Integer -- -- 이 함수는 지정된 값이 양의 정수일 경우 true를 반환하고 false를 반환합니다. --그렇지 않은 경우.테이블에서는 동작하지 않지만, 그대로 여기에 포함되어 있습니다. -- 지정된 테이블 키가 배열 부분에 있는지 또는 배열 부분에 있는지 판별할 때 유용합니다. -- 테이블의 해시 부분. ------------------------------------------------------------------------------------ 기능. p.isPositiveInteger(v) 돌아가다 유형(v) == '숫자' 그리고. v >= 1 그리고. 바닥.(v) == v 그리고. v < > 무궁무한 끝. ------------------------------------------------------------------------------------ -- IsNan -- -- 이 함수는 지정된 번호가 NaN 값일 경우 true를 반환하고, 값이 NaN일 경우 false를 반환합니다. -- 아닙니다. 테이블에서는 동작하지 않지만, 도움이 되기 때문에 여기에 포함되어 있습니다. -- 값이 유효한 테이블키인지 아닌지를 판단합니다.Lua가 생성한다. -- NaN이 테이블 키로 사용되는 경우 오류가 발생합니다. ------------------------------------------------------------------------------------ 기능. p.Nan(v) 돌아가다 유형(v) == '숫자' 그리고. v ~= v 끝. ------------------------------------------------------------------------------------ -- 얕은 클론 -- -- 테이블 클론을 반환합니다.반환되는 값은 새 테이블이지만, -- 서브테이블과 함수는 공유됩니다.메타메트호드는 존경받지만 돌아온 사람들은 -- 테이블 자체에는 메타블이 없습니다. ------------------------------------------------------------------------------------ 기능. p.얕은 클론(t) 체크 타입('shallow Clone', 1, t, '테이블') 현지의 리트 = {} 위해서 k, v 에 쌍들(t) 니 리트[k] = v 끝. 돌아가다 리트 끝. ------------------------------------------------------------------------------------ --removeDuplicates(복제) -- -- 이렇게 하면 배열에서 중복된 값이 제거됩니다.양의 정수 이외의 키는 -- 무시되었습니다.첫 번째 값은 유지되며 이후의 모든 중복 값은 다음과 같습니다. --삭제되었지만 그 이외의 어레이 순서는 변경되지 않습니다. ------------------------------------------------------------------------------------ 기능. p.중복 제거(arr) 체크 타입('중복 제거', 1, arr, '테이블') 현지의 Nan = p.Nan 현지의 리트, 존재한다 = {}, {} 위해서 _, v 에 아이페어(arr) 니 한다면 Nan(v) 그리고나서 NaN은 테이블 키가 될 수 없고, 또한 고유하기 때문에 존재 여부를 확인할 필요가 없습니다. 리트[#리트 + 1] = v 또 다른 한다면 것은 아니다. 존재한다[v] 그리고나서 리트[#리트 + 1] = v 존재한다[v] = 진실의 끝. 끝. 끝. 돌아가다 리트 끝. ------------------------------------------------------------------------------------ -- numKeys(numKeys) -- --테이블을 가져와서 임의의 수치를 포함한 배열을 반환합니다. -- 숫자 순서로 정렬된 비문자 값을 가진 키. ------------------------------------------------------------------------------------ 기능. p.숫자 키(t) 체크 타입('num Keys', 1, t, '테이블') 현지의 isPositiveInteger = p.isPositiveInteger 현지의 숫자 = {} 위해서 k 에 쌍들(t) 니 한다면 isPositiveInteger(k) 그리고나서 숫자[#숫자 + 1] = k 끝. 끝. table.displaces(숫자) 돌아가다 숫자 끝. ------------------------------------------------------------------------------------ -- pixNums -- --테이블을 가져와서 키 수가 포함된 배열을 반환합니다. --지정된 프레픽스와 서픽스.예를 들어 테이블의 경우 -- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} 및 접두사 "a"가 반환됩니다. -- {1, 3, 6}. ------------------------------------------------------------------------------------ 기능. p.접사 번호(t, 접두사, 접미사) 체크 타입('affixNums', 1, t, '테이블') 체크 타입('affixNums', 2, 접두사, '문자열, 진실의) 체크 타입('affixNums', 3, 접미사, '문자열, 진실의) 현지의 기능. clean Pattern(클린 패턴)(s) -- 패턴을 클리어하여 마법의 문자()%가 되도록 합니다.[]*+-?^$는 문자 그대로 해석됩니다. 돌아가다 s:서브('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') 끝. 접두사 = 접두사 또는 '' 접미사 = 접미사 또는 '' 접두사 = clean Pattern(클린 패턴)(접두사) 접미사 = clean Pattern(클린 패턴)(접미사) 현지의 양식 = '^' .. 접두사 .. '([1-9]%d*)' .. 접미사 .. '