함수를 이용한 사용자 정의 정렬
Coddy Lua 여정의 Logic & Flow 섹션에 포함된 레슨 — 54개 중 8번째.
table.sort()는 숫자나 문자열의 단순한 리스트에는 잘 작동하지만, 실제 데이터는 종종 더 복잡합니다. 플레이어 기록, 인벤토리 아이템 또는 게임 점수 테이블이 있을 수 있으며, 여기서 각 항목은 그 자체로 여러 필드를 가진 테이블입니다.
이러한 복잡한 구조를 정렬하려면, table.sort()에 두 항목을 비교하는 방법을 정확히 알려주어야 합니다. 이럴 때 사용자 정의 비교 함수가 필수적입니다. 비교 함수는 두 개의 요소를 인자로 받아 정렬된 순서에서 첫 번째 요소가 두 번째 요소보다 앞에 와야 하는 경우 true를 반환합니다.
플레이어 기록 테이블이 포함된 예제입니다:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)정렬 후에는 players 테이블은 score를 기준으로 내림차순으로 정렬될 것이며, Bob이 첫 번째(200), Charlie가 두 번째(175), Alice가 세 번째(150)가 됩니다. 비교 함수는 각 player 테이블의 score 필드에 접근하여 그들의 순서를 결정합니다.
원하는 필드라면 무엇이든 정렬할 수 있습니다. 이름은 알파벳순으로, 레벨은 숫자순으로 정렬하거나 여러 기준을 결합할 수도 있습니다.
치트 시트
복잡한 데이터 구조를 가진 테이블을 정렬하려면 table.sort()와 함께 사용자 정의 비교 함수를 사용하세요. 비교 함수는 두 개의 요소를 인자로 받으며, 첫 번째 요소가 두 번째 요소보다 앞에 와야 할 경우 true를 반환합니다.
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)이것은 플레이어들을 점수에 따라 내림차순으로 정렬합니다. 테이블 구조 내의 어떤 필드로도 정렬할 수 있습니다.
직접 해보기
이 레슨에는 코드 챌린지가 없습니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.