GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2] 배열 함수-배열 정렬

타락카얀 2024. 1. 1. 10:41
728x90

 

 

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개 요소의 순서를 역순으로 재정렬합니다.

 

 

 

 

 

 

 

 

300x250