ActionScript3(AS3) 라이브러리 학습의 (二)--Array와 Vector 그룹 조작 파악

7464 단어 actionscript
Array와 Vector는 AS3에서 두 가지 중요한 클래스이다. 이 두 클래스는 모두 수조를 나타내는 데 쓰인다. 그들은 많은 공통점이 있고 같은 방법이 있다. 그러나 그것들도 많은 차이점이 있다. 주로 다음과 같은 몇 가지가 있다.Array에는 여러 종류의 대상,number,String, 심지어 더 복잡한 대상과 그룹을 저장할 수 있습니다.한편, Vector는 다양한 유형의 대상을 넣을 수 있지만 구조를 할 때 수용하는 데이터 형식을 지정해야 하기 때문에 지정한 후에 변경할 수 없다. 한 Vector 대상은 하나의 데이터 유형의 대상만 넣을 수 있다.추가하거나 읽어들일 객체의 데이터 유형이 Vector의 기본 유형과 일치하지 않으면 오류가 발생합니다.2. Array는 느슨한 수조이다. 즉, index 0과 index 5는 값이 있지만 그 사이에는 값이 없다.Vector는 인덱스 위치마다 값이 있어야 하는 밀집 배열입니다.값이 있는 것은 어떤 색인에서undefined가 될 수 없다는 것을 가리킨다.3. Array의 조작은 더욱 자유롭다. 존재하지 않는 인덱스에 임의로 접근해서 값을 부여할 수 있고 Vector는 엄격한 경계선 검사를 한다.이러한 차이로 인해 Array는 더욱 유연성을 가지게 되었고 Vector는 더욱 안전하고 효율적이다.그래서 Vector를 사용할 수 있는 상황에서 가능한 한 Vector로 실현할 수 있다.또 하나의 특수한 관련 수조가 있는데 Object로 만들 수 있다. 이것은 Object와 비슷하고 adobe는 이런 수조를 사용하는 것을 추천하지 않기 때문에 무시하자. 다음은 두 가지 수조를 상세하게 소개하고 비교한다. 하나.배열 만들기 Array는 구조 함수 전달 길이나 그룹 내 대상을 통해 배열을 만들 수도 있고 중괄호로 값을 부여해서 만들 수도 있습니다.그룹 내의 대상은 다른 유형일 수 있습니다.
            var arr1:Array = new Array();

            trace(arr1);

            var arr2:Array = new Array(5);

            trace(arr2);

            var arr3:Array = new Array("a", 3, "b");

            trace(arr3);

            var arr4:Array = [];

            trace(arr4);

            var arr5:Array = ["a", 3, "b"];

            trace(arr5);


Vector는 구조 함수 전달 길이나 그룹 내 대상을 통해 그룹을 만들 수도 있고 중괄호로 값을 부여해서 만들 수도 있습니다.글로벌 함수를 사용하여 작성할 수도 있습니다. 글로벌 함수를 사용하면 Array를 Vector로 변환하고 Array의 각 객체를 Vector에서 지정한 유형으로 변환합니다.모든 생성 방법은 데이터 형식을 지정해야 합니다.
            var vec1:Vector.<int> = new Vector.<int>();

            trace(vec1);

            var vec2:Vector.<int> = new Vector.<int>(5);

            trace(vec2);

            trace(vec2.fixed);

            var vec3:Vector.<int> = new Vector.<int>(5,true); // vector 5

            trace(vec3.fixed);

            var vec4:Vector.<int> = new <int>[0,1,2];

            trace(vec4);

            var vec5:Vector.<int> = Vector.<int>([0, 1, 2]);

            trace(vec5);

            var arr:Array = [0, 1, "string"];

            var vec6:Vector.<int> = Vector.<int>(arr);

            trace(vec6);


둘.찾기 작업Array와 Vector는 모두 ==(유형과 값이 모두 같다)로 찾기 함수인 indexOf, lastIndexOf를 비교할 수 있습니다.구체적인 용법은 다음과 같다. indexOf(element): 원소의 색인 값을 되돌려주고 -1을 되돌려주지 않는다.indexOf(element, index): 제 index(왼쪽에서 오른쪽으로) 개 요소부터 검색하고 요소의 인덱스 값을 되돌려줍니다. 되돌려주는 -1은 존재하지 않습니다.lastIndexOf(element): 오른쪽에서 왼쪽으로 찾으면 원소의 색인 값을 되돌려주고 -1을 되돌려주지 않습니다.stIndex Of(element, index): 오른쪽에서 왼쪽으로, 제 index(왼쪽에서 오른쪽으로) 개 요소부터 찾습니다. 요소의 색인 값을 되돌려줍니다. 되돌려주는 것은 -1이 존재하지 않습니다.셋.Array와 Vector 모두push,pop,shift,unshift 작업을 지원합니다.Vector가 고정 길이인 경우에는 요소를 삭제할 수 없습니다.push는 하나 이상의 요소를 그룹 끝에 삽입합니다.pop은 그룹 끝에서 원소shift를 꺼내서 하나 이상의 원소를 그룹 머리에 삽입합니다.시프트는 그룹 헤더에서 원소를 옮깁니다. 또한 Array와 Vector는 [] 조작부호를 통해 원소를 추가할 수 있습니다.그러나 Array는 요소를 임의의 인덱스에 추가할 수 있고, 그룹의 길이를 존재하는 가장 큰 index+1으로 바꿀 수 있으며, Vector는 연속적으로 증가할 수 있으며, 인덱스 값이 길이 범위를 초과하면 오류가 발생합니다.다음 예를 참조하십시오.
            var arr:Array = [0, 1, 2];

            arr[5] = 5;

            trace(arr);

            var vec:Vector.<int> = Vector.<int>([0, 1, 2]);

            vec[3] = 3;

            vec[5] = 5;//error

            trace(vec);


넷.그룹의 조합과 캡처Array와 Vector는 concat, splice, slice,join 등 동작을 지원하여 새로운 그룹이나 문자열을 생성합니다.concat: 여러 요소나 그룹을 새 그룹으로 합치기 splice: 색인을 지정한 모든 요소나 개수를 삭제할 수 있는 요소 (0, 즉 삭제하지 않을 수 있음), 여러 요소를 삽입할 수 있습니다.삭제된 요소를 새 그룹으로 되돌려줍니다.이 작업은 원래 배열을 변경하므로 Vector 길이가 고정될 때 수행할 수 없습니다.slice: 그룹의 시작점 인덱스와 끝점 인덱스 (포함하지 않음) 사이의 요소를 가져오고 그룹 형식으로 되돌려줍니다.join: 그룹의 요소를 문자열로 변환하고, 요소 사이에 지정한 구분자를 삽입하고, 이 요소를 연결한 다음 결과 문자열을 되돌려줍니다.플러그인 그룹은 항상 쉼표 (,) 로 구분되며,join () 방법에 전달되는 구분자를 사용하지 않습니다.또한 Array와 Vector는 Length를 설정해서 그룹을 캡처할 수 있습니다. 예를 들어arr.Length=0;배열을 비웁니다.그러나 Vector 길이가 고정된 경우에는 이 작업을 수행할 수 없습니다.오.그룹 요소의 위치를 바꾸는 Array와 Vector는 모두 Reverse,sort,sortOn 등reverse를 지원합니다: 그룹의 순서를 반전시키고 원 그룹을 바꾸는 동시에 원 그룹을 가리키는 인용을 되돌려줍니다.
            var letter1:Array = new Array("a", "b", "c");

            var letter2:Array = letter1.reverse();

            letter2[2] = "modified";

            trace(letter1);

            trace(letter2);


sort: 불안정한 정렬 알고리즘으로 원소를 정렬합니다.기본 정렬에는 다음과 같은 세 가지 방법이 있습니다. 즉, 요소 중 어떤 유형의 요소든string으로 간주하고 유니코드 값에 따라 정렬합니다.원소 형식이 사용자 정의 대상이고 tostring () 함수를 정의하면 이 함수로string으로 전환해서 비교합니다.정의된 비교 함수로 정렬하기:sort(compareFunction)는 지정한 정렬 방식으로 정렬합니다: 아래 값이나 |로 아래 값을 조합해서 정렬할 수 있습니다 1 or Array.CASEINSENSITIVE    2 or Array.DESCENDING    4 or Array.UNIQUESORT    8 or Array.RETURNINDEXEDARRAY    16 or Array.NUMERICsortOn: 요소의 하나 이상의 속성에 따라 불안정한 정렬 알고리즘을 사용합니다.이런 정렬 방법은 수조의 모든 원소가 하나 이상의 속성을 요구하고 적어도 같은 속성이 있어야 한다.그 용도는 다음과 같은 예를 볼 수 있다. arr.sortOn(someFieldName);//기본string의 유니버설 값에 따라 순서를 정하고 첫 번째 속성에 따라 순서대로 뒤에 있는 속성에 따라arr.sortOn(someFieldName, Array.DESCENDING | Array.NUMERIC);//모든 속성에 대해 수치의 내림차순으로 arr.sortOn(["a", "b", "c", [Array.DESCENDING, Array.NUMERIC, Array.CASEINSENSITIVE]);//속성 a는 알파벳 내림차순으로, 속성 b는 숫자 오름차순으로, 속성 c는 알파벳 대소문자 오름차순으로 6을 무시한다.요소를 반복하는 Array와 Vector는 다섯 가지 요소의 반복 방법을 제공합니다.forEach(callback:Function,thisObject:*=null)는 배열의 각 요소에 대한 콜백 함수를 실행합니다.리셋 함수는 값을 되돌릴 필요가 없습니다.map(callback:Function,thisObject:*=null)은 리셋 함수에 따라 원수조의 모든 요소를 조작하고 리셋 함수로 결과를 되돌려 새 수조를 생성합니다.filter(callback:Function,thisObject:*=null): 리셋 함수를true로 되돌려 주는 모든 요소를 추출하여 새 그룹을 구성합니다.some(callback:Function,thisObject:*=null) 리셋 함수를true로 되돌려주는 요소가 있다면 some는true로 되돌려줍니다.every(callback:Function,thisObject:*=null) 모든 요소가 리셋 함수를true로 되돌려줘야 every가true로 되돌려줍니다.이런 반복 방법은 우리에게 매우 편리하게 한 조의 데이터를 처리하는 방법을 제공했다.다음은 아래의 용례를 가상하여 실현하자. 일련의 대상에 대해 그 중의 사람을 찾아내고 모든 사람에게 월급을 돌려주며 모든 사람이 20세 이상이고 남성인지, 남성이 존재하는지 판단한다.
	public class People 

	{

		public var name:String;

		public var sex:String;

		public var age:int;

		public var salary:int;

		public function People(n:String,sx:String,a:int,sa:int) 

		{

			name = n;

			sex = sx;

			age = a;

			salary = sa;

		}

		public function toString():String

		{

			return "name:" + name + ",sex:" + sex + ",age:" + age + ",salary:" + salary;

		}

		

	}


 
		public function IsPeople(item:*,index:int,arr:Array):Boolean 

		{

			if (item is People) {

				return true;

			}

			else {

				return false;

			}

		}

		public function Out(item:*,index:int,arr:Array):void 

		{

			trace(item.toString());

		}

		public function GetSalary(item:People, index:int, arr:Array):int

		{

			return item.salary;

		}

		public function Oldthan20(item:People, index:int, arr:Array):Boolean

		{

			return item.age > 20;

		}

		public function IsMale(item:People, index:int, arr:Array):Boolean

		{

			return item.sex == "male";

		}


 
			var arr:Array = new Array(1, new People("jack", "male", 28, 5000),

			"a", new People("rose", "female", 24, 7000), new Object(),

			new People("ring", "female", 30, 2000), new People("sam", "male", 35, 10000));

			var peoples:Array = arr.filter(IsPeople);// 

			peoples.forEach(Out);

			var salarys:Array = peoples.map(GetSalary);// 

			salarys.forEach(Out);

			trace(peoples.every(Oldthan20));// 20 

			trace(peoples.some(IsMale));// 

			trace(peoples.every(IsMale));// 


좋은 웹페이지 즐겨찾기