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