Converting Array to Vector

작성자

카테고리:

배열(Array)을 벡터(Vector)로 변환하는 것을 테스트 해봤습니다. 인터넷에서 검색해보면 거의 for나 for in을 사용해서 변환을 시키더군요. 그래서 Function.apply()를 사용하면 어떨까 하고 시험해 봤는데, apply 가 압도적인 속도를 보여주고, 코드 또한 간결하네요.

아래 코드로 테스트 해보면 대충 for는 80ms, for in은 90ms, apply는 15ms 정도의 속도를 보여줍니다. Function.apply()를 가끔 사용하긴 하는데, 이렇게 빠른지는 오늘 처음 알았네요.

import flash.utils.getTimer;

// original array
var arr:Array = new Array();
for(var i:uint=0; i<1000000; i++){
	arr.push(i);
}

// vector
var vec:Vector. = new Vector.();

var n:int = getTimer();

// for
/*var len:uint = arr.length;
for(i=0; i

코멘트

4의 “Converting Array to Vector”에 대한 답변

  1. hika 아바타

    공식문서를 찾아보시면 as3가 Vector라는 함수를 제공한다는 사실을 알 수 있습니다.

    Vector.( arr ); 이라고 하시면 됩니다.

    1. Hangun's World 아바타

      앗… 그렇게도 사용할 수 있었군요. 역시 공식문서를 잘 봐야 한다니까요 ㅎㅎㅎ
      그렇지만 속도면에서는 위 방법이 약 20ms 정도 나오는 걸로 보아서 apply()가 미세하게 빠르네요. 유의미한 수준은 아니지만, 속도에 매우 민감한 경우라면 apply()를 사용하는 게 좋을 듯 하네요.
      그럼 즐거운 주말 되세요 ^^

  2. hika 아바타

    음 그리고 위의 실험은 사실 좀 불리하게 설정되어있는데
    for안에 vec.push(arr[i]); 라고 하셨잖아요. push가 느려요. push는 push( 1,2,3,4) 같은 것도 처리할 수 있도록 rest로 설계되어있습니다. 그래서 push를 하면 인자를 재분석하여 하나하나 배열에 담는 방식의 알고리즘이 작동해야합니다.
    vec[vec.length] = arr[i]; 로 하면 훨씬 빨라집니다.

    1. Hangun's World 아바타

      아, 말씀하신 방법으로 해 보니 속도가 50%정도 향상되네요. 앞으로 비슷한 경우에 push() 대신 직접 대입하는 방법을 먼저 고려해 봐야겠네요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다