GAME MAKER 강좌
KAYAN
두 배열 그룹의 교집합 값과 합집합 값을 구하는 방법에 대해 알아봅시다.
◈ 두 배열 그룹의 교집합
(▲ 교집합)
두 배열 그룹(또는 여러 그룹)의 교집합 값은 아래 함수를 사용하면 쉽게 새 배열 그룹으로 구성할 수 있습니다.
● array_intersection(array1, array2 [, array3, ... array_n]) |
이 함수는 지정한 배열 그룹들 간에 일치하는 값들로 새로운 배열 그룹으로 반환합니다.
그리고 중복 값은 1개의 고유 값만 남깁니다.
예를 들어, 아래와 같은 배열 그룹의 교집합을 구한다면,
array1=["사과","오렌지","배","포도","파인애플","복숭아"] array2=["사과","바나나","수박","포도","파인애플","딸기"] my_array=array_intersection(array1, array2); |
my_array 배열은 아래와 같이 ["사과", "포도", "파인애플"]값으로 구성됩니다.
my_array[0]="사과"; my_array[1]="포도"; my_array[2]="파인애플"; |
◈ 두 배열 그룹의 중복값을 포함한 합집합
(▲ 합집합)
두 배열 그룹(또는 여러 그룹)의 합집합값은 아래 함수를 사용하면 쉽게 새 배열 그룹으로 구성할 수 있습니다.
● array_concat(array1, array2 [, array3, ... array_n]) |
이 함수는 배열 순서대로 모든 값을 결합한 새 배열을 반환합니다.
배열과 배열을 하나로 결합하는 것이기 때문에 중복값이 있더라도 같이 포함됩니다.
예를 들어, 아래와 같은 배열 그룹의 합집합을 구한다면,
array1=[1, 3, 15, 21]; array2=[2, 6, 15, 18, 21, 35]; my_array=array_concat(array1, array2); |
my_array 배열은 [1, 3, 15, 21, 2, 6, 15, 18, 21, 35]값으로 구성됩니다.
◈ 두 배열 그룹의 중복값을 제거한 합집합
(▲ 합집합)
두 배열 그룹(또는 여러 그룹)의 합집합값은 아래 함수를 사용하면 쉽게 새 배열 그룹으로 구성할 수 있습니다.
● array_union(array1, array2 [, array3, ... array_n]) |
이 함수는 배열의 중복된 값은 1개의 고유값만 남기고, 모든 값을 결합한 새 배열을 반환합니다.
예를 들어, 아래와 같은 배열 그룹의 합집합을 구한다면,
array1=[1, 3, 15, 21]; array2=[2, 6, 15, 18, 21, 35]; my_array=array_union(array1, array2); |
my_array 배열은 [1, 3, 15, 21, 2, 6, 18, 35]값으로 구성됩니다.
◈ 배열에서 중복값 제거
배열 내에서 중복값을 제거할 때는 아래 함수를 사용하면 쉽게 제거할 수 있습니다.
● array_unique(array, [offset], [length]) |
이 함수는 지정한 배열(array)의 중복된 값은 1개의 고유한 값만으로 새 배열을 반환합니다.
※ [참고] : [offset] 과 [length] 는 옵션 설정으로 지정 범위내에서만 부분적 배열 구성이 필요할 때 설정합니다.
[offset] 은 배열내 적용 범위의 시작 위치를 지정합니다.
양수로 지정하면 정방향, 음수로 지정하면 역방향의 범위를 지정할 수 있습니다.
예를 들어, -1을 지정하면 배열의 맨 끝부터, -2를 지정하면 끝에서 두번째부터 범위를 적용할 수 있습니다.
참고로 배열의 첫번째 인덱스는 0번입니다.
[length] 는 적용 범위의 길이를 지정합니다.
양수로 지정하면 정방향, 음수로 지정하면 역방향의 범위를 지정할 수 있습니다.
예)
array1=[2, 6, 15, 6, 21, 18, 35, 15]; my_array=array_unique(array1); |
위의 코드에서 중복값 [6, 15] 을 각각 1개씩만 남기면, [2, 6, 15, 21, 18, 35]가 됩니다.
◈ 차집합
(▲ 차집합)
먼저 array_intersection 함수를 사용하여 두 배열의 교집합을 구합니다.
그리고 array_filter 함수를 사용하여 차집합으로 구하고자 하는 배열을 지정하고 교집합의 배열을 제거하면 됩니다.
● array_filter(array, function, [offset], [length]) |
array_filter 함수는 지정한 배열(array)을 콜백 메서드로 필터링에 유효한 값으로 새 배열을 반환합니다.
예를 들어, 아래와 같은 콜백 메서드를 필터링에 사용한다면,
예)
function passed_the_test(element, index) { return element >= 50; // 반환값이 참(true)이면 배열에 값을 추가, 거짓(false)이면 걸러냄. } scores = [0, 15, 4, 78, 96, 65, 49]; passed = array_filter(scores, passed_the_test); |
지정한 배열을 순환하면서 배열 인덱스의 값이 콜백 메서드 passed_the_test에 유효한 값일 때, 새 배열 passed에 추가하게 됩니다.
위 내용을 차집합을 구하는데 응용하면 아래와 같습니다.
먼저 array1 과 array2의 교집합을 구하고, 이것을 필터링할 콜백 메서드 passed_the_test에 사용합니다.
그리고 array_filter 함수로 차집합을 구할 배열을 순환하면서 유효한 값으로 새 배열을 만듭니다.
//array 1의 차집합을 구할 때, array1=[1, 3, 15, 21]; array2=[2, 6, 15, 18, 21, 35]; _target=array_intersection(array1, array2);//두배열의 교집합 var passed_the_test = function(_val, _index) //차집합에 적용할 함수 { var i,n,_return; _return=1; if is_array(_target){ if array_length(_target)>0{ n=array_length(_target); for(i=0;i<n;i++;){ if (_target[i]==_val){_return=0;break;}//교집합 값은 포함하지 않음(false) } } } return _return; } passed = array_filter(array1, passed_the_test); //차집합으로 구하고자 하는 배열을 지정하고 교집합의 배열을 제거함 |
위의 코드에서 array1의 차집합은 교집합 [15, 21]을 제외하면, array1에서 [1, 3]가 남습니다.
◈ 대칭차
(▲ 대칭차)
대칭차는 차집합을 응용하면 됩니다.
먼저 array_concat 함수를 사용하여 두 배열의 합집합을 구합니다.
그리고 array_intersection 함수를 사용하여 두 배열의 교집합을 구합니다.
다음 array_filter 함수를 사용하여 합집합으로 구한 배열을 지정하고 교집합의 배열을 필터링하면 됩니다.
scores1=[1, 3, 15, 21]; scores2=[2, 6, 15, 18, 21, 35]; // 배열 score1 과 배열 score2 의 차집합 구하기 _all_array=array_concat(scores1, scores2);//두배열의 중복값을 포함한 합집합. 중복값 제거는 array_union함수 사용 _target=array_intersection(scores1, scores2);//두배열의 교집합 //배열 함수에 사용할 콜백 메서드 var passed_the_test = function(_val, _index) //차집합에 적용할 함수 { var _return=1; if is_array(_target){ if array_length(_target)>0{ _return = !(array_contains(_target,_val));//교집합값은 제외 } } return _return; } //합집합 배열을 지정하고 교집합의 배열을 제거함 passed = array_filter(_all_array, passed_the_test); |
위의 코드에서 대칭차는 교집합 [15, 21]을 제외하면, scores1에서 [1, 3], scores2에서는 [2, 6, 18, 35]가 남습니다.
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 앱폴더 이외의 경로 엑세스 (0) | 2024.03.18 |
---|---|
[게임메이커 강좌-기초][GMS2] 배열값 우선순위로 정렬하기 (2) | 2024.01.03 |
[게임메이커 강좌-기초][GMS2] 배열 함수-필터링 함수 (1) | 2024.01.01 |
[게임메이커 강좌-기초][GMS2] 배열 함수-배열 정렬 (3) | 2024.01.01 |
[게임메이커 강좌-기초][GMS2] 배열 함수-배열의 길이 (0) | 2023.12.31 |
댓글