lua의 table 정렬
lua에서 table.sort(t,func)
함수를 이용하여 정렬한다. t는 테이블, func는 함수이다.
table.sort(t)
했을 경우 요소가 문자,숫자를 기본 정렬한다. 하지만 오름차순, 내림차순, 대소문자 구별 등
다양한 제어를 하기 위해서는 아래 함수를 만들어 활용하면 편리하다.
주의할 점은 원본 table의 위치가 정렬상태로 바뀌게 된다. 원본을 유지하고 싶다면 복사본을 만든 다음 정렬해야 한다.
필터 함수 정의
-- *sort.asc* : 숫자,문자,UTF8 모두 가능
local function ascending(a,b)
return a < b -- a가 b보다 작으면 true
end
-- *sort.desc* : 숫자,문자,UTF8 모두 가능
local function descending(a,b)
return a > b -- a가 b보다 크면 true
end
-- *sort.bylength*
local function bylength(a,b)
return #a < #b -- 문자열의 길이에 따라 오름차순 정렬
end
-- *sort.iascendig* - 대소문자 구분 없이 오름차순 정렬
local function iascendig(a,b)
return string.lower(a) < string.lower(b)
end
-- *sort.idescending* - 대소문자 구분 없이 정렬
local function idescending(a,b)
return string.lower(a) > string.lower(b)
end
-- *sort.bykey*
local function bykey(key)
return function(a,b)
return a[key] < b[key]
end
end
활용
local numbers = {5, 3, 8, 1, 2}
table.sort(numbers, ascending) -- 오름차순 정렬
local strings = {"banana", "apple", "cherry"}
table.sort(strings, alphabetical) -- 알파벳 순 정렬
local objects = {
{name = "Alice", age = 30},
{name = "Bob", age = 25},
{name = "Charlie", age = 35}
}
table.sort(objects, byKey("age")) -- 나이에 따라 오름차순 정렬
REFERENCE
- duck.ai
- Quick Guide to Lua Table Sort: Mastering Order with Ease