AS3.0 Cookbook/배열2008. 7. 5. 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 버터백통