배열은 포인터이고 배열의 이름은 0번째 원소의 주소지를 가리킨다.

 또한 배열의 이름은 언제나 0번째 원소를 가라키는 변경불가능한 상수이다.

 ex) ary[] = {1,2,3,4,5};

ary = &ary[0];//배열의 0번째 주소지를 표현

*ary = 1; //0번째 주소지의 값을 표현

 

 반면 포인터는 언제나 주소지를 변경할 있는 변수이다.

 

    int a[5] = {1,2,3,4,5};

NSLog(@"*a=%i",*a);

int * pa;

pa = a;//또는 pa = &a[0];

NSLog(@"a[0] = %d a[1] = %d a[2] = %d a[3] = %d a[4] = %d",a[0],a[1],a[2],a[3],a[4]);

NSLog(@"pa[0] = %d pa[1] = %d pa[2] = %d pa[3] = %d pa[4] = %d",pa[0],pa[1],pa[2],pa[3],pa[4]);

int b[] = {6,7,8,9,10};

pa = b;

NSLog(@"pa[0] = %d pa[1] = %d pa[2] = %d pa[3] = %d pa[4] = %d",pa[0],pa[1],pa[2],pa[3],pa[4]);

NSLog(@"**************************************************************");

/*

**** 포인터의 연산

1) 포인터가 가리키는 값을 증가 혹은 감소시키는 연산

2) 포인터가 가리키는 대상원소를 증가 또는 감소 : 자료형의 크기만큼 증가한다.

) int 4바이트 만큼 증가

char형도 자료형의 크기만큼 1바이트 증가

double형은 8바이트 만큼 증가

*/ 

int * ptr1;

char * ptr2;

double * ptr3;

NSLog(@"ptr1번지=%d, ptr2번지=%d, ptr3번지=%d, ", ptr1, ptr2, ptr3);

//ptr1번지=0, ptr2번지=0, ptr3번지=0, : 초기값을 주지 않아 전부 0으로 보여진다.

NSLog(@"ptr1번지=%d, ptr2번지=%d, ptr3번지=%d, ", ptr1++, ptr2++, ptr3++);

//ptr1번지=0, ptr2번지=0, ptr3번지=0: 마찬가지로 초기값이 없어 0이지만 증가 값은 다르다

/*

int 4바이트 만큼 증가

char형도 자료형의 크기만큼 1바이트 증가

double형은 8바이트 만큼 증가한 것이다.

*/

//마지막에 null문자인 \0 삽입하여 원소마지막을 알림

char arry[6] = {'K','o','r','e', 'a', '\0'};

char * p_arry = arry;

NSLog(@"memory address = %x", p_arry);

NSLog(@"*p_arry = %c", *p_arry);

//K 출력 : 0번때 우너소의 값을 출력

NSLog(@"*(++p_arry) = %c", *(++p_arry));

//o 출력 : 0번째원소에서 ++ 의해 포인터는 1번째 원소를 가리킴

NSLog(@"*(++p_arry) = %c", *(++p_arry));

//r 출력 : 1번째 원소를 가리키는 ++ 에의해 2번째 원소를 가리킴

NSLog(@"*(p_arry+1) = %c", *(p_arry + 1));

//e 출력 : 2번째 원소(r) 가리키나 + 1 의해 다음 원소의 값을 출력

NSLog(@"*(p_arry+2) = %c", *(p_arry + 2));

//a 출력 : 2번째 원소(r) 가리키나 + 2 의해 4번째 원소의 값을 출력

신고
Posted by 정윤수 버터백통
TAG Array, pointer
AS3.0 Cookbook/배열2008.07.20 13:39

배열 원소의 무작위 정렬은 sort와 random을 같이 사용한다. sort()에서 두 원소의 비교 함수의 값이 음수일 때 앞의 원소가 두번째 원소앞에 위치하게 되고 비교함수의 값이 양수이면 첫 번째 원소는 두 번째 원소 뒤로 위치하게 된다. 따라서 sort( randomSort )에 비교 값을 양수 또는 음수의 값을 랜덤하게 넣어주면 원소끼리의 순서가 바뀌게 된다.

* sort의 비교함수 값을 임의의 값을 바꾸어 준다.
private function randomSort( elementA:Object , elementB:Object ):Number
{
   var num:Number = (Math.random() - 0.5) * 10;
   return num
}

Math.random은 0.0에서 1.0까지의 값이 랜던하게 반환한다. 따라서 -0.5를 하면 -0.5 에서 0.5까지 양수와 음수를 반환하게 되는데 각 값이 너무 작은 값이기에 소수점 한자리로 포인터를 이동시켜준다.
 




신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.20 13:31

 배열의 원소를 정렬하는 메서드는 sort와 sortOn이 있다. sort는 기본적인 Array클래스의 정렬에 사용되며 몇개의 상수로 정렬기준을 정할 수 있다. sortOn은 연관배열의 키를 기준으로 정렬을 한다.

sort에는 다음과 같은 상수가 있다
* 배열 정렬 상수
Array.CASEINSENSITIVE : 대소문자 구분 없이 오름차순으로 정렬
Array.DESCENDING : 내림차순으로 정렬
Array.NUMERIC : 숫자를 기준으로 오름차순
Array.RETURNINDEXEDARRAY : 오름차순으로 정렬하고 그 원소 번호를 반환
Array.UNIQUESORT : 오른차순으로 정렬하자는 않고 원소의 번호만 반환 , 같은 값이 있을 경우 0을 반환


* Array.NUMERIC을 제외한 sort는 배열안에 숫자가 있을 경우 아스키로 취급하여 그 값의 크기로 정렬한다.
* Array.UNIQUESORT를 제외하고는 전부 원소의 상태를 정렬한다.

sortOn은 키를 기준으로 정렬한다.
옵션으로 키와 소트 상수를 제공한다.

sort를 잘사용하면 편리한 점이 많이 있다. 그 중에 숫자 값의 최소와 최대를 구하면 간단히 숫자정렬을 하면된다.
var ary:Array = [10 , 24 , 5 , 8];
ary.sort( Array.NUMERIC );
trace("min :" , ary[0]);
trace("max :" , ary[ary.length - 1]);
출력 : min = 5 , max = 24


신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.13 18:27

배열을 만들 때는 가독성있게 값을 참조하기 위해 연관배열을 사용한다. 연관배열은 Object라는 클래스로 이름과 값을 같이 저장하는 배열을 말하는데 가령 자동차 회사에서 연식과 색상 제조회사에 대한 데이터를 아래와 같이 만들었다고 할 때 이 값들을 참조하기 위해서는 알수 없는 숫자들로만 참조해야 한다.
var car:Array = [];
car.push(["은색" , "2000년식" , "대우"]);
car.push(["흰색" , "2003년식" , "현대"]);
car.push(["빨강색" , "1998년식" , "현대"]);
car.push(["파랑색" , "20002년식" , "기아"]);

var len:int = car.length;
for (var i:int=0; i<len; i++) {
 trace(car[i][0] + "   " + car[i][1] + "    " + car[i][2]);
}

출력 :
은색   2000년식    대우
흰색   2003년식    현대
빨강색   1998년식    현대
파랑색   20002년식    기아


위처럼 누군가가 이 코드를 보면서 어떤 데이터가 있는 추측하기란 실행전까진 쉽지않다. 따라서 원소의 이름을 붙인 연관배열을 정수색인 배열에 포함하여 그 값을 유추하기 쉽도록 바구어 보자.
var car:Array = [];
car.push({color:"은색" , year:"2000년식" , maker:"대우"});
car.push({color:"흰색" , year:"2003년식" , maker:"현대"});
car.push({color:"빨강색" , year:"1998년식" , maker:"현대"});
car.push({color:"파랑색" , year:"20002년식" , maker:"기아"});

var len:int = car.length;
for (var i:int=0; i<len; i++) {
 trace(car[i].color + "   " + car[i].year + "    " + car[i].maker);
}
출력 :
은색   2000년식    대우
흰색   2003년식    현대
빨강색   1998년식    현대
파랑색   20002년식    기아

이처럼 연관배열을 사용하면 2차 3차원 그 이상의 배열일지라도 무섭지 않다!! 뭐 심하게 다차원이라면 싫지만요..

* 연관배열은 중괄호 {}로서 그 값을 설정한다.
var num:Object = { name:"홍길동" , ....}
중괄호( {} )안의 내용은 네임탭과 값 그리고 나열은 정수색인 배열처럼 컴머를 기준으로 나열된다.

신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.13 18:09

String , int , Number...등의 원시(primitive)데이터는 변수를 복사하면 값이 복제가 된다.
var var01:String = "호랑이";
var var02:String = var01;
trace(var01)     // 출력 : 호랑이
trace(var02)     // 출력 : 호랑이

var02 = "원숭이";
trace(var01)    // 출력 : 호랑이
trace(var02)    // 출력 : 원숭이


이처럼 원본의 값을 이어받은 var02는 실제로 값이 복제되어 값에 변화가 있어도 원본과는 별도로 저장이 된다. 하지만 조합(composite)데이터 타입인 배열(정수색인 배열, 연관배열)은 데이터가 존재하는 메모리상의 주소만을 갖는다. 때문에 위에 코드처럼 선언하면 값이 참조가 된다. 이 참조된 값은 서로 연결되어 있으므로 한개의 값이 바뀌면 다른 참조 변수의 값도 바뀌게 된다. 하지만 AS3가 개선되고 부터는 복제를 할때 자동으로 concat()을 사용한 것 처럼 최상위 배열의 값이 복제가 된다.
var var01:Array = ["a" , "b" , "c"]
var var02:Array = var01;
(이 부분이 var var02:Array = var01.concat()과 같이 자동으로 최상위 배열은 복제를 하게 되었다.)
trace(var01)      // 출력 : a,b,c
trace(var02)      // 출력 : a,b,c
var01 = ["d" , "e" , "f"]
trace(var01)      // 출력 : d,e,f
trace(var02)      // 출력 : a,b,c


* concat() 은 매트릭스나 배열이나 문자열...등을 연결(연관)시키때 사용한다.

하지만 최상위 배열에 포함한 배열은 아직까지는 참조 값으로 저장한다.
var var01:Array = [];
var01.push(["a" , "b" , "c"])
var01.push(["1" , "2" , "3"])  
var var02:Array = var01 or var01.concat();
trace("var01 : " , var01);       //출력 : var01 :  a,b,c,1,2,3
trace("var02 : " , var02);      // 출력 : var02 :  a,b,c,1,2,3
var01[0][0] = ["d" , "e" , "f"];  
trace("var01 : " , var01);     // 출력 : var01 :  d,e,f,b,c,1,2,3
trace("var02 : " , var02);    
// 출력 : var01 :  d,e,f,b,c,1,2,3

이처럼 2차배열 보다 더 복잡한 배열의 구조안에서는 최상위 배열은 복제가 이루어 져도 그 하위 배열은 값을 참조하므로 한개의 값이 바뀌면 다른 배열들에도 영향을 미치게 된다.

신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.08 21:32
앞서 문자열에 심볼을 추가하여 이를 split()라는 메서드를 통해 배열의 원소로 등록하는 방법을 살펴보았다.
이번에는 완전히 반대인 경우인데 배열을 문자열로 변환하는 join()이라는 메서드를 살펴보도록 하자.
var ary:Array = [ "a" , "b" , "c" ]
trace( ary.join() ) 
// 출력 : "a,b,c"


어떠한 배열에 join메서드를 사용하면 각 원소들은 문자열로 변환하는데 join( sep ) sep라는 파라미터가 있다. 이값이 설정되어있지 않으면 컴머( , )를 구분자로 사용하게 되고 특정 심벌을 설정하면 배열 원소들 사이에 구분자로 설정된다.
trace( ary.join("#") )  // 출력 : "a#b#c"

신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.06 21:59
많은 데이터를 xml로 파싱하여 보내야하는데 실 데이터 보다는 부가설명이 더 많은 경우 특정 심벌을 사용하여 데이터 그룹을 만든다...
<user id="Flex" name="홍길동" addr="서울 강남구 청담1동" phone="010-555-5555" job="개발자"/> 라는 데이터가 있다...물론 위에 정의된 속성 정도는 많지 않기 때문에 경우에 따라 보기좋게 그냥 사용하여도 무방하지만 이러한 데이터 노드가 1000개..또는 노드는 적더라도 속성이 많아서 데이터 자체의 용량이 무거울 때 보통 특수 심벌을 정하여 데이터를 묶는다.
<user>"Flex|홍길동|서울 강남구 청담1동|010-555-5555|개발자"</user>
이처럼 가독성은 떨어지지만 불필요한 속성 이름들을 줄여주면 와이브로나 무선인터넷을 사용하는 생보사 직원들에게는 1초라도 빨리 데이터를 넘겨주어 화면에 출력하게 할 수 있다.
실제로 오래된 어떤 보험사의 경우 한번에 던져주는 데이터가 3메가 이상 던져주는 경우도 있었다..오래된 데이터 구조와 해를 거치면서 연관되고 묶여진 관련 데이터가 많아지고 현업에서는 손대기 싫다고 하더랍니다..그래서 우리 동료들이 무지 고생들 해서  통신 클래스를 새로 때려 만들어서 해결했다는 후담이 있다.

여튼 요는 불필요한 이름이라도 줄여 "데이터심벌데이터심벌데이터"과 같은 형태로 용량을 줄이고 이를 as3에서는 문자열을 쪼개서 데이타그리드를 만들어야 한다. 이때 걸쳐야하는 것이 배열이다...
가령 앞서 요약된데이터 ("Flex|홍길동|서울 강남구 청담1동|010-555-5555|개발자")가 들어오면 split("|")를 사용한다. 데이터의 문자열중에 "|"를 기준으로 좌우로 원소를 분해하여 배열에 포함시키거나 값으로 선언할 수 있다.
var user:Array = ( "Flex|홍길동|서울 강남구 청담1동|010-555-5555|개발자" ).split("|")
trace(user)    
// 출력 : Flex , 홍길동 , 서울 강남구 청담1동 , 010-555-5555 , 개발자

위의 코드는 심벌 "|"를 사용하여 데이터를 나누어 각 원소로 등록한 것이다.





신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.05 20:06

보통 for문을 사용하여 배열에 원소를 검사하여 찾고자 하는 값이나 단어의 일부를 검색하고 할 때는 배열의 속성중에 indexOf()를 사용한다. 자주 사용하지는 않겠지만 필요할 때 번번히 새로 만드는 것 보다는 클래스로 구현하여 가지고 있으면 더더욱 활용가치가 클 것 같아 만들어 보았다.

배열의 값은 다음과 같다고 할때
var  ary:Array = ["서울" , "경기도" , "강원도" , "전라도" , "경상도" , "제주도" , "충청도"];
배열에 "서"을 포함하는 원소나 "전"을 포함하는 원소번호를 알아내어 접근하고자 할 때 다음과 같이 메서드를 호출한다.
원소0부터 시작하여 검색하고 1개가 발견되면 실행종료 후 원소번호 리턴
trace( findIndex( ary , "서" ) + "번 원소와 일치합니다." );    // 출력 : 0번 원소와 일치합니다.

모든 원소를 검색하여 포함되는 원소가 있으면 모두(Array) 리턴
trace( findIndices( ary , "경") + "번 원소와 일치합니다." )   // 출력 : 1,4번 원소와 일치합니다.

각 메서드는 다음과 같다.
//배열에서 찾은 1개의 원소번호를 반환
  private function findIndex( target:Array , word:Object ):int
  {
   var lengthNum:int = target.length;
   var i:int;
   var idx:int;
   for( i=0 ; i<lengthNum; i++ ){
    if( target[i].indexOf(word) != -1 ){
     idx = i;
     break;
    }else{
     idx = -1;
    }
   }
   return idx;
  }

앞에서 부터 한개의 원소만 찾은 후 반환하는 위 메서드는 사실 많이 사용되진 않겠지만 indexOf의 값이 -1이 아닐때 즉 값이 있을 경우 원소번호를 반환하고 순환문은 종료한다.

//배열에서 찾은 여러개의 원소번호를 반환
  private function findIndices( target:Array , word:Object ):Array
  {
   var lengthNum:int = target.length;
   var i:int;
   var idx:int;
   var indices:Array = [];
   for( i=0 ; i<lengthNum; i++ ){
    if( target[i].indexOf(word) != -1 ){
     indices.push( i );
    }else{
     idx = -1;
    }
   }
   return indices;
  }

포함되는 모든 원소를 알아내는 위 메서드를 저는 주로 사용하겠지만 앞서 만들어진 메서드와 같은 방법으로 indexOf를 통해 포함여부를 확인하고 있으면 내부의 배열에 push한다. 순환문을 모두 마치면 그 배열을 반환한다.

물론 위의 코드는 뼈대만 만들어 보았고 반환타입이나 값, 실행시 필요한 값들이 좀 더 다듬어져야 할 것 같다.

신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.05 20:06

배열에서 제공하는 메서드중에 값을 추가하는 unshift와 push가 있고 값을 빼서 반환하는 shift와 pop을 살펴보았는데 이들은 모두 배열의 맨 처음이나 맨뒤에 원소만을 처리하는 명령문이다... 물론 따로 만들 수 있지만 AS에서는 splice()라는 메서드를 통해 배열 중간의 원소를 삭제하거나 추가하는 방법이 있다.

배열의 중간 부터 원소를 삭제
* splice( 시작할 원소 번호 , 시작 원소에서 지울 개수 )


배열의 중간에 값을 삽입 : 두 번째 파라미터의 값이 0 이면 원소를 추가만 한다.
* splice( 시작할 원소 번호 , 시작 원소에서 지울 개수  , 추가할 원소 )

가령 아래와 같은 배열을 선언하고 splice를 테스트 한다.
var  ary:Array = ["서울" , "경기도" , "강원도" , "전라도" , "경상도" , "제주도" , "충청도"];

ary.splice( 1 , 2 )
결과 : 경기도,강원도
 
- 1번 원소에서 부터 2개의 원소를 제거하고 반환

ary.splice( 3 , 3 , "울산" , "광주" , "대전" )
결과 : 서울 , 경기도 , 강원도 , 울산 , 광주 , 대전 , 충청도
- 3번 원소 이후 3개를 삭제하고 그 자리에 3개의 원소를 추가

신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.05 20:06

배열의 원소 값을 순서대로 활용하고 싶을때는 for() 순환문을 사용한다.
for문의 검사식에서 해당 배열의 길이 값을 활용하여 배열의 길이만큼 실행하면서 배열의 값을 추출한다.
var ary:Array = [ "a" , "b" , "c" , "d" ]
for(var i:int=0 ; i<ary.length ; i++){
trace( ary[i] )
}
출력 : a  b  c  d


이처럼 0번 원소부터 마지막 4번째 원소인 3번 원소까지 for문은 반복실행하면서 i값을 증가하고, 증가한 i값을 통해 배열의 원소로 접근하도록 한다.

또는 뒤에서부터 값을 추출 하고 싶을 때는 다음과 같이한다.
var ary:Array = [ "a" , "b" , "c" , "d" ]
for(var i:int=ary.length - 1 ; i >= 0 ; i--){
trace( ary[i] )
}

출력 : d  c  b  a
배열의 길이에 1을 감소하는 것은 길이의 크기와 실제 배열의 원소 번호와의 값이 일치하지 않기 때문에 원소로 접근하기 0부터 세어진 원소의 counter를 염두하여 길이의 -1을 한다.

* 위처럼 for문의 검사식이 실행할 때마다 배열.length를 사용한다면 반복문이 실행할때마다 배열의 길이를 계산하여 읽어오게 된다. 따라서 for문이 실행중에 배열의 길이에 변화가 없다면 미리 변수에 길이를 저장하는것이 바람직하다.
var ary:Array = [ "a" , "b" , "c" , "d" ]
var aryNum:int = ary.length
for(var i:int=0 ; i< aryNum; i++){
trace( ary[i] )
}
출력 : a  b  c  d
위의 코드처럼 aryNum라는 변수에 계산한 배열의 길이를 담아두었다가 for문에서 활용한다.

배열의 특정 값을 추출하고 싶을 때는 조건문을 하나 추가하면 된다.
var ary:Array = [ "a" , "b" , "c" , "d" ];
var aryNum:int = ary.length;
var match:String = "c";
for (var i:int=0; i< aryNum; i++) {
 if ( ary[i] == match) {
  trace( "찾는 값은 : " , i , "번 원소" );
  break;
 }
}

// 출력 : 찾는 값은 :  2 번 원소
찾는 문자열을 변수에 담아 for문이 실행시에 매번 해당 원소와 값을 비교한다. 찾는 것이 있으며 break하여 순환문에서 빠져나온다.

신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.07.05 20:05

앞서 정수색인 배열을 선언하고 대괄호를 통해 원소의 값을 추가하는 방법을 알아 보았다. 이번에는 배열의 제일 앞이나 제일 뒤에 원소를 추가/삭제하는 방법을 살펴도록 한다.


[ 추가 메서드 ]
var ary:Array = ["a" , "b" , "c" , "d"]
위와 같은 배열이 선언되었다고 할 때 0번 원소의 자리에 "A"을 추가한다.
ary.unshift("A")
trace(ary)
         // 출력 : A,a,b,c,d

그리고 제일 마지막 원소 뒤에 "B"를 추가하여 보자
ary.push("B")
trace(ary)       
// 출력 : A,a,b,c,d,B

* unshift 메서드
unshift배열의 제일 앞 원소인 0번째 자리에 값을 추가하고 배열의 새길이를 반환한다.
위의 코드에서 ary.unshift("A") 부분을 trace하면 5라는 값을 보여준다 이는 기존의 4개의 원소에서 A가 추가되어 길이가 늘어났음을 의미한다.

* push 메서드
push는 unshift와 반대로 제일 마지막 원소 뒤에 값을 추가하고 배열의 새길이를 반환한다.
trace (ary.push("B") )f라고 값을 추가하면서 확인하여 보면 역시 "B"가 추가된 배열의 길이 6을 나타낸다.

[ 삭제 메서드 ]
var ary:Array = ["a" , "b" , "c" , "d"]
위의 테스트와 같은 배열에 앞의 원소를 삭제하여 보자.
trace( ary.shift() )      // 출력 : a
trace( ary )               // 출력 : b , c , d

제일 마지막 원소를 삭제한다.
trace( ary.pop() )       // 출력 : d
trace( ary )              
// 출력 : a , b , c


* shift메서드
shift는 배열의 0번 원소를 추출하여 반환하고 해당 배열의 0번 원소를 삭제한다. 삭제된 배열은 한칸씩 앞으로 당겨져 채워진다.


* pop메서드
pop메서드는 shift와 반대로 배열의 제일 마지막 원소를 삭제하여 반환한다.

신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.06.29 16:28
일반적으로 배열하면 정수색인 배열을 많이 사용한다. 연관배열은 따로 오브젝트라고 호명하기도 한다.
배열의 선언법은 다양한다.
var ary = new Array();
ary = [ "처음 값" , "두번째 값" , "세번째 값"]

과 같이 new를 통해 메모리에 할당하고 ary에 Delegate한다. 배열 ary의 값을 입력하기 위한 두번째 코드에는
대괄호안에 컴머(,)로 구분하여 일련의 슬롯에 값을 위치한다. ary = [ "처음 값" , "두번째 값" , "세번째 값"]는
0번째 슬롯 즉 0번 원소의 값은 "처음 값"이라는 문자열이 들어있고 , 왼쪽에서 부터 3번째는 0부터 세어 2번 원소라 하고 그 값은 "세번째 값"이라는 문자열이 선언되었다.

trace( ary[0] )     // 출력 : "처음 값"
trace( ary[1] )     // 출력 : "두번째 값"
trace( ary[2] )     // 출력 : "세번째 값"


이처럼 정수 색인 배열은 최초로 선언되는 값(왼쪽 끝)의 원소를 0이라고 정하고 컴머로 각 원소를 1씩 증가하여 참조할 주소지를 정하게 된다. 따라서 정수 색인 배열의 원소는 다음과 같이 정해진다.
ary = [ 0번 원소 , 1번 원소 , 2번 원소 , 3번 원소....]

아래는 내가 자주 사용하는 선언식이다.
new Array()라는 생성자 없이 바로 변수명과 값을 선언한다.
var ary = [ "처음 값" , "두번째 값" , "세번째 값"]
또는 빈 배열이 필요할 때는 아래와 같이 빈값을 준다.
var ary = [ ]

값의 입력과 참조는 위와 같은 방법으로 사용하면 된다.
trace( ary[0] )     // 출력 : "처음 값"
trace( ary[1] )     // 출력 : "두번째 값"
trace( ary[2] )     // 출력 : "세번째 값
"

마지막으로 다음과 같은 선언식이 있다.
var ary = new Array( "처음 값" , "두번째 값" , "세번째 값" )
이처럼 생성자에서 바로 값을 주어 배열을 선언하기도 한다.

배열의 값을 위처럼 선언시 설정하기도 하지만 보통은 런타임시 값을 대입하거나 수정,설정할 때는 해당 원소를 찾아가 값을 선언한다.
가령 ary에 3번 원소에 값을 "네번째 값"이라고 선언하고 싶으면 아래와 같이 선언한다.
ary[3] = "네번째 값";
배열 ary를 출력하면 "처음 값" , "두번째 값" , "세번째 값" , "네번째 값"과 같이,
0~3까지 4개의 원소가 출력된다.

그럼 위의 배열에 다음과 같이 6번째 원소에 값을 입력하자.
ary[6] = "일곱번째 값"
출력하면 다음과 같이 나타난다.
"처음 값" , "두번째 값" , "세번째 값" , "네번째 값" , undefined , undefined , "일곱번째 값"
위와 같이 중간에 undefined 가 포함된 이유는 원소가 순차적으로 값을 가지고 선언된것이 아니라
원소 6이 문자열을 갖고 생성되면서 원소 4와 5에는 아무것도 없는 무( 無 )로서 undefined 로 표현된다.
* 참조 : undefined는 아무것도 값이나 이름조차 없는 공간이다.
null인 경우는 선언된 Delegate는 있지만 그 값이 비어있는 무( 無 )일때 표현된다.


이처럼 ary배열은 0부터 6원소까지 7개의 값을 갖는 배열이다. 이러한 배열의 길이는 구하는 것이 length()라는 메서드이다. 이 length()는 배열의 원소 길이를 정수로 반환한다.
var ary = [ "처음 값" , "두번째 값" , "세번째 값" , "네번째 값" ]
trace( ary.length() )     // 출력 : 4

배열의 길이는 자연수의 증가이므로 원소번호와 혼돈하면 안된다.
가령 ary = ["A"]라하면 0번째 원소를 갖은 길이 1인 배열이다.


[ Array 클래스의 메서드 ]
concat(... args):Array

매개 변수에 지정된 요소를 배열의 요소와 연결하여 새 배열을 만듭니다. Array

every(callback:Function, thisObject:* = null):Boolean
지정된 함수에 대해 false를 반환하는 항목에 도달할 때까지 배열의 각 항목에 테스트 함수를 실행합니다.

filter(callback:Function, thisObject:* = null):Array
배열의 각 항목에 테스트 함수를 실행하고 지정된 함수에 대해 true를 반환하는 모든 항목이 포함된 새 배열을 만듭니다.

forEach(callback:Function, thisObject:* = null):void
배열의 각 항목에 함수를 실행합니다.
 
indexOf(searchElement:*, fromIndex:int = 0):int
완전 항등 연산자(===)를 사용하여 배열의 항목을 검색하고 항목의 인덱스 위치를 반환합니다.
 
join(sep:*):String
배열의 요소를 문자열로 변환하고, 지정된 분리 기호를 요소 사이에 삽입하고, 요소를 서로 연결한 후 결과 문자열을 반환합니다.

lastIndexOf(searchElement:*, fromIndex:int = 0x7fffffff):int
배열의 마지막 항목부터 역순으로 항목을 검색하고 완전 항등 연산자(===)를 사용하여 일치하는 항목의 인덱스 위치를 반환합니다.

map(callback:Function, thisObject:* = null):Array
배열의 각 항목에 함수를 실행하고 원래 배열의 각 항목에 대한 함수 결과에 해당하는 항목으로 구성된 새 배열을 만듭니다.

pop():Object
배열에서 마지막 요소를 제거하고 해당 요소의 값을 반환합니다.
 
push(... args):uint
배열 끝에 하나 이상의 요소를 추가하고 배열의 새 길이를 반환합니다.

reverse():Array
배열의 순서를 뒤집습니다.
 
shift():Object
배열에서 첫 번째 요소를 제거하고 해당 요소를 반환합니다.

slice(startIndex:int = 0, endIndex:int = 16777215):Array
원본 배열에 포함된 요소 중 일정한 범위의 요소로 구성되는 새 배열을 반환하되, 원본 배열을 수정하지 않습니다.

some(callback:Function, thisObject:* = null):Boolean
true를 반환하는 항목에 도달할 때까지 배열의 각 항목에 테스트 함수를 실행합니다.

sort(... args):Array
배열의 요소를 정렬합니다.

sortOn(fieldName:Object, options:Object = null):Array
배열에 포함된 요소는 해당 배열 내의 하나 이상의 필드에 따라 정렬합니다.

splice(startIndex:int, deleteCount:uint, ... values):Array
배열에 요소를 추가하고 배열에서 요소를 제거합니다.

toLocaleString():String
지정된 배열의 요소를 나타내는 문자열을 반환합니다.

toString():String
지정된 배열의 요소를 나타내는 문자열을 반환합니다.

unshift(... args):uint
배열의 맨 앞에 하나 이상의 요소를 추가하고 배열의 새 길이를 반환합니다.


신고
Posted by 정윤수 버터백통
AS3.0 Cookbook/배열2008.06.29 15:46
한개의 변수는 한개의 데이터 공간에 한개의 값으로 구성된 데이터 타입이지만 배열은 한개의 공간할당으로 여러개의 값이나 인스턴스등을 구성할 수 있다. 이러한 배열은 연관된 데이터를 그룹으로 관리하고 데이터들을 구조화 하거나 처리하는데 용이하다. 이러한 배열은 정수 색인 배열과 조합배열 또는 연관배열이라고 하는 두가지로 나누어 볼 수 있다.


정수 색인 배열(Integer-insexed Array)
배열의 각각의 원소에 접근하기 위해 정수를 사용한다. 이러한 배열은 0부터 시작하는 정수번호를 갖는 슬롯을 차지하는 값인 원소로 정렬되어 있다.
정수 색인 배열은 연속된 순서에 의해 접근이 가능한 데이터의 집합이다.


연관 배열(Associative Array , Hash table)
각각의 원소(값)에 접근하기 위해 문자열을 사용한다. 보통 Object클래스가 이러한 헝식을 가지고 있다.
신고
Posted by 정윤수 버터백통