lua 정렬 함수 (table. sort) 오류 분석 - 정렬 을 위 한 잘못된 order 함수
2992 단어 lua
table. sort 소스 코드 및 주석
static void auxsort (lua_State *L, int l, int u) {
while (l < u) { /* for tail recursion */
int i, j;
/* sort elements a[l], a[(l+u)/2] and a[u] */
lua_rawgeti(L, 1, l);
lua_rawgeti(L, 1, u);
if (sort_comp(L, -1, -2)) /* a[u] < a[l]? */
set2(L, l, u); /* swap a[l] - a[u] */
else
lua_pop(L, 2);
if (u-l == 1) break; /* only 2 elements */
i = (l+u)/2;
lua_rawgeti(L, 1, i);
lua_rawgeti(L, 1, l);
if (sort_comp(L, -2, -1)) /* a[i]= P */
while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) {
if (i>u) luaL_error(L, "invalid order function for sorting");
lua_pop(L, 1); /* remove a[i] */
}
/* repeat --j until a[j] <= P */
while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) {
if (j
invalid order function for sorting 오류 의 원인 및 해결 방법
while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) {
if (i>u) luaL_error(L, "invalid order function for sorting");
lua_pop(L, 1); /* remove a[i] */
}
/* repeat --j until a[j] <= P */
while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) {
if (j
원본 코드 에서 잘못된 위 치 를 볼 수 있 습 니 다.닻 점 의 값 이 경계 값 과 같 을 때 정렬 방법 sortcop 가 true 로 돌아 가면 배열 이 경 계 를 넘 을 수 있 고 해결 방안 도 간단 합 니 다. 비교 한 두 값 이 같 을 때 false 로 돌아 가면 됩 니 다.
개인 적 으로 좋 은 lua 정렬 함수 쓰기
전투력 랭 킹 에 전투력 이 있다 고 가정 하면 레벨 두 개의 정렬 인자 가 있 습 니 다. 먼저 전투력 에 따라 높 은 것 에서 낮은 것 으로 배열 한 다음 에 레벨 에 따라 높 은 것 에서 낮은 것 으로 배열 해 야 합 니 다. 그러면 정렬 함 수 는 이렇게 쓸 수 있 습 니 다.
table.sort( , function(a, b)
if a. ~= b. then
return a. > b.
end
if a. ~= b. then
return a. > b.
end
return false
end)
ps: 위 에서 언급 한 lua 버 전 은 5.1 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Neovim을 위한 자동 완성NeoVim으로 생산성을 높일 수 있는 가장 멋진 기능 중 하나는 자동 완성이므로 성능에 따라 플러그인을 선택할 수 있습니다. YouCompleteMe Coc.nvim 이 플러그인은 사용하기 좋지만 Javascrip...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.