본문 바로가기

FLASH/AS3.0기초

Array

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"];

'FLASH > AS3.0기초' 카테고리의 다른 글

OOP란  (0) 2012.10.25
Math  (0) 2012.10.25
타이머  (0) 2012.10.25
AS2.0 과 AS3.0의 대표적인 차이점  (0) 2012.10.25
Object 클래스  (0) 2012.10.25
String  (0) 2012.10.25
함수  (0) 2012.10.25
반복문  (0) 2012.10.25
선언문, 조건문  (0) 2012.10.25
변수  (0) 2012.10.25