관리 메뉴

WonHada.com으로 이전

[AS 2.0] ArrayUtil.insert() 본문

플래시/플렉스[Flash/Flex]

[AS 2.0] ArrayUtil.insert()

반주부 2009. 4. 16. 14:40











6 Comments
  • 프로필사진 2009.04.24 09:59 비밀댓글입니다
  • 프로필사진 반주부 2009.04.24 17:23 신고 싸..= _ =
  • 프로필사진 권재영 2009.09.05 14:55 플생에서건 블로그에서건 눈팅만 하다가 소스보구 글 남깁니다.
    공개해주신 소스가 긴 길이의 배열일 경우에
    아무래도 반복을 많이 해야 할 듯 해서 다른 방식으로 짜보았습니다.

    function inserts( arr1 : Array, idx : Number, arr2 : Array ) : Array
    {
    var len : Number = arr1.length;
    return arr1.slice( 0, idx ).concat( ( new Array( ( idx > len - 1 ) ? idx - len:0 ).concat( arr2 ) ).concat( arr1.slice( idx, len ) ) );
    }

    function insert( arr1 : Array, idx : Number, val : Object ) : Array
    {
    var arr : Array = new Array();
    var len : Number = arr1.length;
    arr[ ( idx > len - 1 ) ? idx - len:0 ] = val;

    return arr1.slice( 0, idx ).concat( arr.concat( arr1.slice( idx, len ) ) );
    }

    3.0에서 짠건데 타입만 2.0 에 맞춰서 남겨봅니다.
    늘 좋은 글들 감사히 보고 있습니다. ^^
  • 프로필사진 반주부 2009.09.07 09:32 신고 ^^ 이렇게 좋은 코드가..
    라이브러리 업데이트 해야겠네요..ㅎㅎ
    좋은 글 남겨주셔서 감사하구요~늘 승리하세요~^^
  • 프로필사진 권재영 2009.09.10 22:57 ^^

    작업하다가 문득 splice 생각이나서 다시 들렀습니다.;;;;
    생각해보니 insert 함수는 splice로 대체할 수 있을 듯 해서요.

    var arr:Array = [0, 1, 2, 3, 4];
    trace((arr = ArrayUtil.inserts(arr, 0, [5, 3])));//5,3,0,1,2,3,4

    이 코드를

    trace( arr.splice( 0, 0, [5, 3]) );
    trace( arr );//5,3,0,1,2,3,4


    그리구

    arr.splice( 100, 0, new Array( 1 ), [5, 3] );
    trace( arr );//0,1,2,3,4,,5,3

    arr.splice( 2, 0, 'a', 'b' );
    trace( arr );//0,1,a,b,2,3,4

    이렇게도 쓸 수 있으니...
    잘 쓰지 않던 splice란 녀석이 달라져 보였습니다. ;;;;;

    아... 그리구 inserts 함수는

    smartInserts와 그냥 inserts로 구분해서 짜보았습니다.

    ArrayUtil.inserts( arr, x, [5, 3] );

    이렇게 호출할 때 x가 arr의 length보다 크면 알아서 마지막에...
    음수 값을 줬을 때도 값에 따라 알아서 처음에 삽입이 될 수 있는
    함수를 smartInserts로

    x의 값(양수&음수)을 주는대로 배열로 돌려주는 inserts 함수로


    trace( ArrayUtil.inserts( arr, -3, [5, 3] ) );//5,3,,0,1,2,3,4
    trace( ArrayUtil.inserts( arr, 7, [5, 3] ) );//0,1,2,3,4,,,5,3
    trace( ArrayUtil.smartInserts( arr, 7, [5, 3] ) );//0,1,2,3,4,5,3


    그런데... 전자가 smart 인건지 후자가 smart 인건지는
    여전히 잘 모르겠습니다.;;;;;;


    즐플하세요~~ ^^
    아.. 그리구 공유해주신 자료도 정말 감사히 잘 받았습니다. ^^;;;

    //inserts
    public static function inserts( arr1 : Array, idx : Number, arr2 : Array ) : Array
    {
    if( idx < 0 )
    {
    arr2 = arr2.concat( new Array( ( idx + arr2.length ) * -1 ) );
    return arr2.concat( arr1 );
    }
    else
    {
    var len : Number = arr1.length;
    return arr1.slice( 0, idx ).concat( new Array( idx > len - 1 ? idx - len:0 ).concat( arr2 ).concat( arr1.slice( idx, len ) ) );
    }
    }

    //smartInserts
    public function smartInserts( arr1 : Array, idx : Number, arr2 : Array) : Array
    {
    return arr1.slice( 0, idx ).concat( arr2.concat( arr1.slice( idx, arr1.length ) ) );
    }
  • 프로필사진 반주부 2009.09.11 10:22 신고 와우..저렇게 멋진 방법이^^
    감사감사~
댓글쓰기 폼