맥스스크립트 기초

배열 함수

스크립팅하는애님 2019. 7. 5. 00:38
728x90
반응형

안녕하세요.

오늘은 어제에 이어 배열에 대해 계속 알아보겠습니다.

배열의 값을 조작하는 함수들인데 맥스 스크립트에서 배열을 자주 쓰기 때문에 기억해 두시면 편합니다.

 

append

' append'는 배열의 마지막에 값을 추가하는 함수입니다.

사용방법은

append 배열 값

입니다.

'Script editor'에서 다음과 같이 적어 봅시다.

 

1
2
3
a = #("a", "b", "c")
append a "d"
format "a = %\n" a
cs

 

 

 

배열형 변수 a에 'a', 'b', 'c'값을 넣고 생성합니다.

'append' 함수를 사용하여 변수 a에 'd'를 추가해 줍니다.

'format' 함수를 이용하여 결괏값을 확인합니다.

이전 내용에 변수에 값을 추가하는 방법으로

 

1
2
a[5] = "e"
format "a = %\n" a
cs

 

로 적으면 비슷하게 값을 추가할 수 있습니다.

 

 

 

하지만 이런 식으로 할 경우 배열의 값이 몇 개가 있는지를 알아야 하고 그다음에 값을 넣는 과정이 필요하게 됩니다.

 

deleteItem

'deleteItem'은 배열의 값 중 원하는 값을 삭제하는 함수입니다.

사용법은

deleteItem 배열 인덱스번호

입니다.

위에 적은 내용에 이어서 적어 봅시다.

 

1
2
deleteItem a 2
format "a = %\n" a
cs

 

 

 

확인을 해보니 2번째 값이 삭제되고 뒤의 값들이 차례로 빈 공간을 채웠습니다.

 

insertItem

'insertItem'은 배열에 값을 추가합니다.

하지만 'append'와는 다르게 변수의 뒤가 아닌 중간에 추가하는 함수입니다.

사용방법은

insertItem 값 배열 인덱스번호

입니다.

이어서 다음과 같이 적어 봅시다.

 

1
2
insertItem "b" a 2
format "a = %\n" a
cs

 

 

 

아까 힘들게 없앴던 "b"가 다시 생겼습니다. ㅎㅎ

 

join

'join' 함수는 배열과 배열을 합치는 함수입니다.

사용 방법은

join 배열 배열

입니다.

다음과 같이 써 봅시다.

(중간에 컴퓨터에 에러가 생겨 에디터를 새로 씁니다.)

 

1
2
3
4
b = #(1, 2, 3)
c = #(4, 5, 6)
join b c
format "b = %\n" b
cs

 

배열형 변수 두 개를 생성하여 합쳐 봤습니다.

 

 

 

두 개의 배열이 앞의 배열에 연결되는 형식으로 합쳐졌습니다.

배열의 특징 중 하나는 문자열과 같이 '+'를 사용할 수 있습니다.

효과는 join과 비슷합니다만 연산자를 사용할 경우 연산된 값이 저장될 변수가 필요합니다.

다음과 같이 작성해 보고 확인해 봅시다.

 

1
2
3
4
b = #(1, 2, 3)
c = #(4, 5, 6)
b = b + c
format "b = %\n" b
cs

 

 

 

배열형 변수 'b'와 'c'를 '+'로 더한 후 다시 변수 'b'에 넣었더니 'join'과 같은 결과 값을 보여줍니다.

 

findItem

'findItem' 함수는 배열 중에서 원하는 값이 어디에 있는지 찾아서 결과를 인덱스넘버로 알려줍니다.

사용법은

findItem 배열 찾는 값

입니다.

다음과 같이 에디터에 적어 봅시다.

 

1
2
a = #("a", "b", "c", "d", "e", "f", "g", "h")
findItem a "c"
cs

 

 

 

 

배열형 변수 'a'의 몇 번째에 값 'c'가 들어있는지 알려 줍니다.

만약 변수에 같은 값이 두 개 이상 존재한다면 어떻게 될까요?

1
2
a = #("a", "b", "c", "d", "e", "c", "g", "c")
findItem a "c"
 
cs

 

 

 

결과 값을 확인해 보니 배열을 순서대로 확인하며 처음으로 나오는 찾으려는 값의 인덱스넘버를 넘겨줍니다.

(찾는 다고는 했지만 완벽하지는 않네요.)

그렇다면 찾는 값이 없으면 어떻게 될까요?

문자만 있는 배열에서 숫자를 찾는 예를 봅시다.

 

1
2
a = #("a", "b", "c", "d", "e", "c", "g", "c")
findItem a 1
 
cs

 

 

 

찾을 수 없는 값을 찾으라니까 '0'을 넘겨줍니다.

 

sort

'sort' 함수는 문자나 숫자를 순서대로 정렬해주는 역할을 합니다.

문자 또는 숫자만 구성되어 있을 때는 문제가 없지만 문자와 숫자가 혼합 되어 있을때는 애러가 발생합니다.

사용 방법은

sort 배열

입니다.

다음과 같이 에디터에 입력해 봅시다.

 

1
2
a = #(1, 13, 5, 10, 6, 2, 2)
sort a
cs

 

 

 

순서가 엉망이었던 배열이 순서대로 정렬됩니다.

같은 값이 2개 이상 있어도 에러 없이 작동합니다.

 

deepCopy

'deepCopy' 함수는 배열의 특성 때문에 필요한 함수입니다.

(지금 배웠던 함수들도 그렇지만...)

다음과 같이 에디터에 적고 실행을 했다고 합시다.

 

1
2
3
4
5
6
a = #(1, 13, 5, 10, 6, 2, 2)
b = a
format "b = %\n" b
 
append a 7
format "b = %\n" b
cs

 

우선 배열 변수 'a'에 값 '#(1, 13, 5, 10, 6, 2, 2)'이 저장됩니다.

그리고 배열 변수 'b'에 'a'를 저장합니다.

그럼 'b'는 값으로 'a'와 동일한 값 '#(1, 13, 5, 10, 6, 2, 2)'이 저장됩니다.

'format' 문으로 확인했더니 생각했던 대로 결과가 나올 것입니다.

그 후에 배열 변수 'a'에 값 '7'을 'append' 함수로 추가합니다.

'a'는 값이 '#(1, 13, 5, 10, 6, 2, 2, 7)'로 바뀔 것입니다.

하지만 'a'만 바꿨으니 'b'는 '#(1, 13, 5, 10, 6, 2, 2)'를 값으로 가질 것입니다.

실제 그런지 확인을 해봅시다.

 

 

 

확인을 해보니 어째선지 'b'도 바뀌어 있습니다.

맥스 스크립트에서

배열과 같은 하나의 변수에 여러 값이 들어가는 변수는

실제로 값을 넣어주지 않고 다른 배열 변수를 값으로 지정할 때

직접 값을 넣는 것이 아닌 참조를 하기 때문입니다.

컴퓨터의 메모리 주소를 사용해서 어쩌고저쩌고 하는 긴 얘기가 오가야 하는 부분이므로 자세한 설명은 생략하겠습니다.

이해하기 쉽게 얘기한다면

'a'는 실제 배열 값을 넣었기 때문에 실제 배열 값을 가지고 있고,

'b'는 실제 배열 값이 아닌 변수 'a'를 넣었기 때문에 'a'를 통해서 값을 확인한다.

정도입니다.

하여튼 원래 문제를 해결하기 위해서는 

'deepCopy'를 사용해야 합니다.

사용방법은

배열형변수 = deepCopy 배열

입니다.

위 예문을 아래와 같이 바꿔 봅시다.

 

1
2
3
4
5
6
a = #(1, 13, 5, 10, 6, 2, 2)
b = deepCopy a
format "b = %\n" b
 
append a 7
format "b = %\n" b
cs

 

 

 

이제 정상적으로 나옵니다.

 

배열과 문자열

'배열'과 '문자열' 같은 '열'이 들어가기 때문에 상당히 유사합니다.

말장난이 아니고요.

배열이 값들의 집합체라고 할 수 있듯이 문자열도 문자들의 집합체입니다.

이렇게 집합체들은 비슷한 구조를 가지고 있기 때문에 배열에서 사용되는 함수를 사용할 수 있습니다.

이 부분은 직접 확인해 보세요.

 

배열은 여기까지 얘기하고, 다음에는 '제어문'에 대해 알아보겠습니다.

728x90
반응형

'맥스스크립트 기초' 카테고리의 다른 글

반복문(while)  (3) 2019.07.10
반복문(for)  (8) 2019.07.09
제어문(case)  (5) 2019.07.07
제어문(if)  (3) 2019.07.07
배열  (6) 2019.07.03
변수의 범위  (10) 2019.07.02
변수의 연산  (0) 2019.07.01
변수  (0) 2019.07.01