GAME MAKER 강좌
KAYAN
◈ 배열값 우선순위로 정렬하기
배열 정렬은 기본적으로 아래와 같이 array_sort 함수를 사용하면 오름차/내림차순으로 정렬할 수 있습니다.
array_sort(array, true) //오름차순으로 정렬. 예) 12345 array_sort(array, false) //내림차순으로 정렬. 예) 54321 |
하지만 지정한 종류별 순서로 정렬하고 싶을 때가 있을 겁니다.
예를 들어, 아래와 같이
A - B - C - D - E - F 또는, F - E - D - C - B - A |
단순 오름차/내림차순서가 아니라, 아래와 같이 정렬 우선 순위를 정해놓고 부분적으로 정렬하는 것입니다.
//목록 우선 순위 C - D - E A - B F //우선 순위에 따라 정렬 C - D - E - A - B - F |
그럴 때는 콜백 메서드를 필터링하면서 정렬하면 됩니다.
이처럼 배열을 종류별로 분류하는 방법에 대해 알아봅시다.
먼저 종류별 순서가 필요합니다.
아이템과 아이템 사이를 구분할 수 있는 기호와 함께 순서대로 작성합니다.
여기에서는 쉼표","를 구분자로 사용하겠습니다.
강좌에서는 대충 아래와 같이 채소, 과일 등의 우선순위를 정해놓겠습니다.
//종류별 우선순위(분류 목록) item_filter=@"수박,멜론,오이,여주,참외,호박, ,사과,오렌지,귤,감,파인애플,배,바나나,포도, ,배추,청경채,상추,치커리,시금치,무, ,도라지,더덕,인삼,"; |
다음, array_sort 함수에 사용할 콜백 메서드를 만듭니다.
배열을 요소를 검사하기 위해, 분류 목록의 문자열을 배열로 분류합니다.
//배열 정렬에 사용할 콜백 메서드 var sort_filter_func=function(_current,_next){ var temp_array=string_split(item_filter,",",true);//분류 목록 item_filter를 배열로 전환 var _sort=0;//0은 변동 없음. var a,b; a=array_get_index(temp_array,_current); //체크할 현재 아이템의 분류 목록 위치 b=array_get_index(temp_array,_next); //체크할 다음 아이템의 분류 목록 위치 if a>=0 && b>=0{_sort=a-b;} //오름차순으로 정렬. 내림차는 b-a. return _sort; //정렬 결과를 정렬함수에 반환. } |
배열의 현재요소의 인덱스와 다음요소의 인덱스를 분류목록에서 찾아 순서의 차이를 계산합니다.
여기서 콜백 메서드의 반환값에 따라 배열의 순서가 아래의 순서로 바뀝니다.
◎ 0 : 변동 없음
◎ 음수 : [현재요소, 다음요소]
◎ 양수 : [다음요소, 현재요소]
이걸 토대로 [현재요소-다음요소]는 오름차순, [다음요소-현재요소]로 하면 내림차순으로 정렬 될 거에요.
이제 array_sort함수와 콜백메서드를 적용하여 아이템이 있는 배열을 정렬하면 됩니다.
//아이템 var array1=["바나나","참외","사과","수박","더덕","귤","파인애플","도라지"]; //아이템 정렬 array_sort(array1,sort_filter_func); |
아이템 배열을 만들고, 원하는 순서대로 정렬되었는지 확인해봅시다.
위의 코드에서 종류별로 정렬하면, 분류 목록순으로 ["수박","참외","사과","귤","파인애플","바나나","도라지","더덕"]가 됩니다.
아이템이 분류 목록에 없는 경우, 먼저 1차로 간단하게 오름차/내림차순으로 정렬합니다.
그러면 글자명순서로 분류되겠죠.
다음 2차로 분류 목록 순서대로 다시 분류하면 됩니다.
예를 들어, 분류 목록에 없는 "아이템1", "아이템2" 가 무작위로 있을 때,
//아이템 var array1=["바나나","참외","아이템2","사과","수박","아이템1","더덕","귤","파인애플","도라지"]; //1차 오름차/내림차순으로 정렬 array_sort(array1, true);//1차로 이름을 오름차순으로 정렬. 내림차순은 false. //2차 분류 목록순으로 다시 정렬 array_sort(array1, sort_filter_func); //종류별로 분류 |
위와 같이 하면 먼저 글자순으로 정렬됩니다.
다음 분류에서 배열은 분류 목록순으로 다시 정렬되어 최종적으로 ["아이템1","아이템2","수박","참외","사과","귤","파인애플","바나나","도라지","더덕"]가 될 겁니다.
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 파일 열기와 파일 저장 함수 (1) | 2024.03.19 |
---|---|
[게임메이커 강좌-기초][GMS2] 앱폴더 이외의 경로 엑세스 (0) | 2024.03.18 |
[게임메이커 강좌-기초][GMS2] 두 배열 그룹의 교집합과 합집합 (1) | 2024.01.03 |
[게임메이커 강좌-기초][GMS2] 배열 함수-필터링 함수 (1) | 2024.01.01 |
[게임메이커 강좌-기초][GMS2] 배열 함수-배열 정렬 (3) | 2024.01.01 |
댓글