사용자 지정 정렬
Coddy GDScript 여정의 논리와 흐름 섹션에 포함된 레슨. 78개 중 51번째.
sort()는 배열을 오름차순으로 정렬하고 배열 자체를 변경합니다. 숫자는 가장 작은 값부터 가장 큰 값 순으로 정렬되며, 문자열은 min()과 같은 순서로 정렬되어 대문자가 먼저 옵니다. 그런 다음 reverse()는 내림차순으로 정렬합니다:
var scores := [40, 95, 12, 70]
scores.sort()
print(scores) # [12, 40, 70, 95]
scores.reverse()
print(scores) # [95, 70, 40, 12]다른 순서로 정렬하려면 sort_custom()을 비교 함수와 함께 호출하세요. 이 함수는 두 요소 a와 b를 받아 a가 b보다 앞에 와야 할 때 true를 반환합니다. 괄호 없이 함수 이름을 전달하세요:
func by_length(a: String, b: String) -> bool:
return a.length() < b.length()
func _ready():
var words := ["banana", "fig", "kiwi"]
words.sort_custom(by_length)
print(words) # ["fig", "kiwi", "banana"]비교 함수는 요소 내부를 들여다볼 수 있습니다. 이 함수는 "hp" 값이 가장 큰 딕셔너리를 앞에 둡니다:
func by_hp(a: Dictionary, b: Dictionary) -> bool:
return a["hp"] > b["hp"]정렬은 안정적이지 않습니다. 비교 결과가 같은 요소는 어떤 순서로든 배치될 수 있습니다. 동점이 중요하다면 첫 번째 필드가 같을 때 두 번째 필드를 비교하세요:
func by_score_then_name(a: Dictionary, b: Dictionary) -> bool:
if a["score"] != b["score"]:
return a["score"] > b["score"]
return a["player"] < b["player"]sort_custom()은 Array에는 있지만, split()이 반환하는 PackedStringArray에는 없으므로 먼저 Array(...)를 사용해 변환하세요. 또한 sort_custom(func(a, b): return a > b)와 같이 비교를 인라인으로 작성하는 방법도 보게 됩니다. 이 형식은 람다이며, 고급 함수 장에서 다룹니다.
챌린지
쉬움프로그램은 두 줄을 읽습니다. 하나는 공백으로 구분된 정수이고, 다른 하나는 공백으로 구분된 단어입니다. 주어진 코드는 이를 numbers(int 배열)와 words(문자열 배열)에 저장합니다.
- 최상위 수준에 비교 함수
by_length(a: String, b: String) -> bool를 작성하세요. 더 짧은 단어가 먼저 오고, 길이가 같은 단어는 사전순으로 정렬합니다. - 네 줄을 출력하세요. 숫자를 오름차순으로, 숫자를 내림차순으로, 단어를 사전순으로(
sort()사용), 그리고sort_custom(by_length)를 사용해 정렬한 단어를 출력합니다.
입력값이 5 3 8 1 2와 elephant cat dolphin bee일 때, 출력은 다음과 같습니다.
Ascending: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]
Alphabetical: ["bee", "cat", "dolphin", "elephant"]
By length: ["bee", "cat", "dolphin", "elephant"]직접 해보기
extends Node
# 여기에 비교 함수 by_length()를 작성하세요
func _ready():
var numbers: Array[int] = []
for text in OS.read_string_from_stdin().split(" ", false):
numbers.append(int(text))
var words := Array(OS.read_string_from_stdin().split(" ", false))
# 배열을 정렬하고 네 줄을 출력하세요
pass
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 GDScript 컴파일러