Array는 각각의 개별적인 데이터값을 여러개 포함하고 있는 데이타구조입니다.
이것은 마치 건물빌딩에 각각의 여러 층이 있는 것과
같습니다.
개별적인 데이터타입과는 다르게 배열은 하나이상의 데이타값을 가질 수 있습니다.
데이타를 다루는데 매우 효율적이기 때문에
배열은 열심히 공부를 해야 합니다.
[배열만드는 방법 3가지]
1. new 생성자 사용
var arr1:Array = new Array();
arr1[0] =
"액션";
arr1[1] = "스크립트";
arr1[2] = "3";
trace(arr1); // '액션,스크립트,3'
출력
2. 배열객체를 생성하면서 값 넣기
var arr2:Array = new Array('액션', '스크립트',
'3');
trace(arr2); // '액션,스크립트,3' 출력
3. [] 연산자를 사용하여 직접 생성
var arr3 = ['액션', '스크립트', '3'];
trace(arr3); //
'액션,스크립트,3' 출력
다음의 예제를 실행해 봅시다.
var arr = new Array();
arr[0] = "a";
arr[1] = 10;
arr[2] = true;
arr[3] = new
String("a");
arr[4] = _root.createEmptyMovieClip("myMC", 1);
arr[5] =
new Object();
trace(arr); // 'a,10,true,a,[object Object]' 출력
배열의 메서드에 대해 살펴봅시다.
메서드 |
다음에 의해 정의됨 |
Array(numElements:int = 0) 지정된 개수의 요소로 구성된 배열을 만들 수 있습니다. |
Array |
Array(... values) 지정된 요소가 포함된 배열을 만들 수 있습니다. |
Array |
concat(... args):Array 매개 변수에 지정된 요소를 배열의 요소와 연결하여 새 배열을 만듭니다. |
Array |
every(callback:Function, thisObject:* =
null):Boolean 지정된 함수에 대해 false를 반환하는 항목에 도달할 때까지 배열의 각 항목에 테스트 함수를 실행합니다. |
Array |
filter(callback:Function, thisObject:* =
null):Array 배열의 각 항목에 테스트 함수를 실행하고 지정된 함수에 대해 true를 반환하는 모든 항목이 포함된 새 배열을 만듭니다. |
Array |
forEach(callback:Function, thisObject:* =
null):void 배열의 각 항목에 함수를 실행합니다. |
Array |
hasOwnProperty(name:String):Boolean 지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. |
Object |
indexOf(searchElement:*, fromIndex:int =
0):int 완전 항등 연산자(===)를 사용하여 배열의 항목을 검색하고 항목의 인덱스 위치를 반환합니다. |
Array |
isPrototypeOf(theClass:Object):Boolean Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. |
Object |
join(sep:*):String 배열의 요소를 문자열로 변환하고, 지정된 분리 기호를 요소 사이에 삽입하고, 요소를 서로 연결한 후 결과 문자열을 반환합니다. |
Array |
lastIndexOf(searchElement:*, fromIndex:int =
0x7fffffff):int 배열의 마지막 항목부터 역순으로 항목을 검색하고 완전 항등 연산자(===)를 사용하여 일치하는 항목의 인덱스 위치를 반환합니다 |
Array |
map(callback:Function, thisObject:* =
null):Array 배열의 각 항목에 함수를 실행하고 원래 배열의 각 항목에 대한 함수 결과에 해당하는 항목으로 구성된 새 배열을 만듭니다. |
Array |
pop():* 배열에서 마지막 요소를 제거하고 해당 요소의 값을 반환합니다. |
Array |
propertyIsEnumerable(name:String):Boolean 지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. |
Object |
push(... args):uint 배열 끝에 하나 이상의 요소를 추가하고 배열의 새 길이를 반환합니다. |
Array |
reverse():Array 배열의 순서를 뒤집습니다. |
Array |
setPropertyIsEnumerable(name:String, isEnum:Boolean =
true):void 루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. |
Object |
shift():* 배열에서 첫 번째 요소를 제거하고 해당 요소를 반환합니다. |
Array |
slice(startIndex:int = 0, endIndex:int =
16777215):Array 원본 배열에 포함된 요소 중 일정한 범위의 요소로 구성되는 새 배열을 반환하되, 원본 배열을 수정하지 않습니다. |
Array |
some(callback:Function, thisObject:* =
null):Boolean true를 반환하는 항목에 도달할 때까지 배열의 각 항목에 테스트 함수를 실행합니다. |
Array |
sort(... args):Array 배열의 요소를 정렬합니다. |
Array |
sortOn(fieldName:Object, options:Object =
null):Array 배열에 포함된 요소는 해당 배열 내의 하나 이상의 필드에 따라 정렬합니다. |
Array |
splice(startIndex:int, deleteCount:uint, ...
values):Array 배열에 요소를 추가하고 배열에서 요소를 제거합니다. |
Array |
toLocaleString():String 지정된 배열의 요소를 나타내는 문자열을 반환합니다. |
Array |
toString():String 지정된 배열의 요소를 나타내는 문자열을 반환합니다. |
Array |
unshift(... args):uint 배열의 맨 앞에 하나 이상의 요소를 추가하고 배열의 새 길이를 반환합니다. |
Array |
[배열 원소 추가]
push(value:Object)
예제
var arr1:Array = new Array();
arr1[0] =
"액션";
arr1[1] = "스크립트";
arr1[2] = "3";
var pushed:Number =
arr1.push("고수", "되자");
trace(pushed); // 5 출력
trace(arr1); //
'액션,스크립트,3,고수,되자' 출력
[배열 원소 삭제]
pop():Object
이 메서드는 배열의 마지막 요소를 제거하고 제거된 요소를 배열값으로 반환합니다.
예제
var myArr:Array = new Array["사과","배","포도","딸기"];
var poped:Array = myArr.pop();
trace(poped); //"딸기"출력
trace(myArr); //"사과", "배", "포도" 출력
[배열 원소 추출 1]
splice(startIndex:Number,[deleteCount:Number], [value:Object]):Array
이 메서드는 배열에 원소를 추가하거나 삭제할 수 있습니다.
반환값은 Array입니다.
startIndex:Number는
삽입또는 삭제가 되는 원소의 인덱스
[deleteCount:Number] 삭제될 원소의 수를 지정하는 정수. 0을 지정하면 원소는 삭제되지
않음
[value:Object] 배열에서 startIndex 매개변수의 지정된 삽입점에 삽입할 값을 지정
갯수만큼 추출
예제
var arr3:Array = new Array("액션","스크립트","3");
var
arr4:Array = arr3.splice(2,1);
trace(arr3); // '액션,스크립트' 출력
trace(arr4);
// '3' 출력
var arr5:Array = new Array("액션","스크립트","3");
var
arr6:Array = arr5.splice(2,1,"고수", "되자");
trace(arr5); // '액션,스크립트,고수,되자'
출력
trace(arr6); // '3' 출력
[배열 원소 추출 2]
slice(startIndex:Number,[endIndex:Number] ):Array
startIndex:Number는 시작하는 배열의 인덱스
[endIndex:Number] endIndex -1까지의 배열의 값
인덱스 번호의 구간만큼 추출한다.
예제
var arr7:Array = new Array("액션","스크립트","3", "고수",
"되자");
var arr8:Array = arr7.slice(1, 3);
trace(arr7); // '액션,스크립트,고수,되자'
출력
trace(arr8); // '스크립트, 3' 출력
[배열복사 1]
var a:Array = [1,2,3,4];
var b:Array =a;
trace(a);
trace(b);
[배열복사 2] /// 어렵다.
function clone(source:Object):*
{
var maBA:ByteArray = new
ByteArray();
maBA.writeObject(source);
maBA.position =
0;
return(maBA.readObject());
}
var a:Array = [1,2,3,4];
var b:Array = clone(a);
b[0] =
100;
trace("b = "+b);
trace("a = "+a);
[배열복사3] /// concat()을 이용한 편리한 방법
var names:Array = ["용호", "진만", "재웅"];
var a:Array =
names.concat();
trace(a);
a[0] = "영진";
trace(a);
trace(names);
[액션스크립트 3에서 추가된 메서드]
forEach()
map()
every()
some()
filter()
[난수 추출 순서]
1. 1~45까지 담기 위한 배열 생성
var a:Array=new Array();
for(var i:int=0;
i<45; i++){
a.push(i+1);
}
2. 6개를 뽑아 내어 담기 위한 배열 생성
var nansu:Array=new Array();
3. 랜덤 함수를 이용해 숫자(index) 하나를 뽑아 낸다.
Math.random()*45;
4. 2번에서 생성한 배열에 숫자들의 배열중 랜덤으로 뽑은 값의 인덱스의 배열 값을 넣는다.
nansu.push(a[num]);
5. 현재 인덱스 값의 배열을 지운다.
a.splice(num,1);
6. 6개의 번호를 담은 배열을 출력
trace(nansu);
로또번호 추첨기 만들기
var lotto:Array = new Array();
for(var i=0; i<46;
i++)
{
lotto.push(i);
}
for(var k:int=0; k<6;k++)
{
var pos:int =
Math.random()*lotto.length;
var num:int
=lotto[pos];
trace(num);
lotto.splice(pos, 1); //당첨된 번호를 제거해서 다시 뽑을 수 없게
만듬
}
1~10까지의 숫자를 섞어라
// 원리는 실습 1.1과 동일하며 반복되는 횟수와 숫자만 변경하여 적용
var
a:Array=new Array();
for(var i:int=0; i<10;
i++){
a.push(i+1);
}
var rnd:Array=new Array();
for(var j:int=0; j<10;
j++){
var
num:int=Math.random()*(10-j);
rnd.push(a[num]);
a.splice(num,1);
}
trace(rnd);
변수와 메서드 동적으로 참조하기
3.0에서도 [](배열연산자)로 동적으로 변수참조 가능
this.bird.head.x;
this["bird"]head.x;
this.bird["head"]x;
this["bird"]head["x"];
this["bird"]["head"]["x"];