GAME MAKER 강좌
KAYAN
◈ 배열 정렬
▣ 주요 목록 ▣
- array_sort(variable, sorttype_or_function) : 배열을 오름차/내림차 정렬 - array_shuffle(array, [offset], [length]) : 배열을 무작위로 뒤섞은 새배열 반환 - array_shuffle_ext(array, [offset], [length]) : 배열을 무작위로 뒤섞기 - array_reverse(array, [offset], [length]) : 배열을 역순으로 정렬한 새배열 반환 - array_reverse_ext(array, [offset], [length]) : 배열을 역순으로 정렬 |
● array_sort(variable, sorttype_or_function) - variable : 변수 배열을 보유하는 변수 - sorttype_or_function : 정렬 유형 (오름차순은 true, 내림차순은 false) 또는 정렬에 사용할 콜백 메서드(-1(음수), 0, 또는 1(양수)을 반환하는 조건자 메서드). |
이 함수를 사용하면 오름차순(true, 작은 값부터,12345) 또는 내림차순(false, 큰 값부터, 54321)으로 배열을
정렬하거나 콜백 메서드를 사용하여 정렬 순서를 정의 할 수 있습니다.
이 함수는 제공된 원래 배열의 내용을 수정합니다.
- 반환값 : 없음
var _a = [5,10, 6, 7, 9, 8]; array_sort(_a, true) |
위의 코드는 배열의 값을 오름차순으로 정렬합니다.
◎ 콜백 메서드 사용
정렬을 위해 콜백 메서드를 사용하는 경우 현재 요소와 다음 요소의 값을 각각 받을 2개의 인수를 사용해야 합니다.
여기서 elm1은 현재 요소이고, elm2는 다음 요소입니다.
예제)
variable = function(elm1, elm2){//정렬함수로부터 받을 수 있는 값은 현재 요소, 다음 요소 값 return elm1 - elm2; //오름차순 예제. 내림차는 elm2 - elm1. //반환값에 따라 배열의 순서가 변경됨. } |
콜백 메서드는 정렬 순서에 영향을 미치기 위해 다음 값 중 하나 (0, 음수, 양수) 를 반환해야 합니다.
0 : elm1(현재 요소)과 elm2(다음 요소)가 동일한 경우. [elm1, elm2] 변동 없음.
<= -1 (음의 정수) : elm1이 elm2보다 앞에 오는 경우. [elm1, elm2] 순서.
>= 1 (양의 정수) : elm1이 elm2 뒤에 오는 경우. [elm2, elm1] 순서.
※[참고 1] 콜백 메서드에서 반환되는 값은 정수여야 합니다. 1보다 작은 소수점 값은 0으로 읽혀지므로
콜백 메서드가 소수점 값과 작동하는 경우 sign(-1, 0, 1 부호반환), 또는 round(반올림) 함수를 사용해 정수로 변환해야 합니다.
※[참고 2] 콜백 메서드가 2개의 요소에 대해 0을 반환하는 경우(또는 오름차순/내림차순을 사용할 때 2개 요소가 동일함)
해당 요소의 순서가 유지되지 않을 수 있습니다.
예를 들어, 아래와 같은 순으로 배열이 있을 때, 콜백 메서드를 사용하여 배열을 오름차순으로 정렬해봅시다.
예제)
var _a = [10, 9, 8, 5, 7, 6]; array_sort(_a, function(elm1, elm2) { return elm1 - elm2; }); |
위의 코드는 콜백 메서드에서 elm1(현재 요소)와 elm2(다음 요소)의 차가 양수이면, [elm2, elm1] 순으로 됩니다.
10 - 9 는 양수이므로 [9, 10]됩니다.
elm1(현재 요소)와 elm2(다음 요소)의 차가 음수이면, [elm1, elm2] 순으로 됩니다.
5 - 7 은 음수이므로 [5, 7]됩니다.
이런 순으로 변경하다보면 배열은 오름차순으로 배치됩니다.
물론 이것은 정렬 함수에서 콜백 메서드가 어떻게 작동하는지 예를 들은 것으로, 단순 오름차/내림차 정렬은 true/false로 지정하는 것이 더 좋습니다.
● array_shuffle(array, [offset], [length]) - array : 뒤섞기(셔플링)를 할 배열 - [offset] : [선택 사항] 뒤섞기를 시작할 배열의 오프셋, 또는 시작 인덱스입니다. 기본값은 0입니다. 음수 값을 설정하면 배열의 끝에서부터 계산됩니다. - [length] : [선택 사항] 뒤섞을 요소의 개수입니다. 기본값은 array_length(array) - 1입니다. |
이 함수는 원래 배열의 요소가 무작위 뒤섞여 재정렬된 새 배열을 반환합니다.
※ [참고] 원래 배열을 제자리에서 변경하는 기능은 array_shuffle_ext를 참조하십시오.
※ [참고] 이 기능은 게임을 새로 실행할 때마다 항목을 같은 위치로 뒤섞습니다.
이 동작을 방지하려면 게임 시작 시 randomise()를 사용하세요.
- 반환값 : Array
var _array = ["Everyday", "I", "'m", "shuffling"]; var _array_shuffled = array_shuffle(_array); show_debug_message(_array_shuffled); |
위의 코드는 먼저 몇 개의 단어가 포함된 배열 _array를 만듭니다.
그런 다음 array_shuffle을 사용하여 배열을 섞고 결과를 _array_shuffled에 저장되는 새 배열로 반환합니다.
마지막으로 디버그 메시지는 무작위로 재정렬된 배열의 내용을 보여줍니다.
● array_shuffle_ext(array, [offset], [length]) - array : [배열] 뒤섞기(셔플링)를 할 배열 - [offset] : [선택 사항] 뒤섞기를 시작할 배열의 오프셋, 또는 시작 인덱스입니다. 기본값은 0입니다. 음수 값을 설정하면 배열의 끝에서부터 계산됩니다. - [length] : [선택 사항] 뒤섞을 요소의 개수입니다. 기본값은 array_length(array) - 1입니다. |
이 함수는 기존 배열을 제자리에서 뒤섞습니다. 즉, 기존 배열을 수정(또는 변경)합니다.
- 반환값 : 없음
var _numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; array_shuffle_ext(_numbers); show_debug_message(_numbers); |
위의 코드는 먼저 1에서 10까지의 숫자로 배열 _numbers를 만듭니다.
그런 다음 array_shuffle_ext를 사용하여 배열을 무작위로 재정렬합니다.
마지막으로 재정렬된 배열을 디버그 메시지로 표시합니다.
● array_reverse(array, [offset], [length]) - array : 사용할 배열 - [offset] : [선택 사항] 배열의 오프셋 또는 시작 인덱스입니다. 음수 값을 설정하면 배열의 끝에서부터 계산됩니다. - [length] : [선택 사항] 순회할 요소의 수입니다. 음수 값은 배열을 거꾸로 탐색합니다. |
이 함수는 주어진 배열의 모든 요소를 역순으로 포함하는 새 배열을 반환합니다.
오프셋 및 길이 값을 제공하여 배열의 일부만 뒤집을 수도 있습니다.
- 반환값 : Array
countdown = [5, 4, 3, 2, 1, 0]; countdown_reverse = array_reverse(countdown); |
위의 코드는 배열 countdown을 생성합니다.
그런 다음 배열 countdown 을 역순으로 정렬한 countdown_reverse 배열을 만듭니다.
● array_reverse_ext(array, [offset], [length]) - array : 사용할 배열 - [offset] : [선택 사항] 배열의 오프셋 또는 시작 인덱스입니다. 음수 값을 설정하면 배열의 끝에서부터 계산됩니다. - [length] : [선택 사항] 순회할 요소의 수입니다. 음수 값은 배열을 거꾸로 탐색합니다. |
이 함수는 주어진 배열의 모든 요소를 역순으로 재정렬합니다.
array_reverse와 유사하지만 함수에 전달한 원래 배열을 직접 수정하고, 배열에서 수정된 요소의 개수를 반환합니다.
- 반환값 : 실수(배열에서 수정된 요소 개수)
values = [1, 2, 3, 4, 8, 7, 6, 5]; array_reverse_ext(values, -4, 4); |
위의 코드는 먼저 배열 값을 만듭니다.
그런 다음 array_reverse_ext를 사용하여 마지막 4개 요소의 순서를 역순으로 재정렬합니다.

'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 두 배열 그룹의 교집합과 합집합 (1) | 2024.01.03 |
---|---|
[게임메이커 강좌-기초][GMS2] 배열 함수-필터링 함수 (1) | 2024.01.01 |
[게임메이커 강좌-기초][GMS2] 배열 함수-배열의 길이 (0) | 2023.12.31 |
[게임메이커 강좌-기초][GMS2] 배열 함수-배열 검색 (0) | 2023.12.31 |
[게임메이커 강좌-기초][GMS2] 배열 함수-배열 생성 및 배열 추가 (0) | 2023.12.31 |
댓글