일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- actions script
- 플래시
- 신촌 #맛집 #백순대 #순대 #연대
- qcy #arcbuds #lite #t27 #공장 #초기화
- CodeIgniter
- 부천 #송내 #맛집 #참치 #술집
- CI
- 미니월광보합
- GeekMagic #smallTV #ultra #gifTV
- geekmagic
- react-native
- Action Script 3.0
- 갤럭시워치 #심박수
- html
- giftv
- https
- flash
- react
- 플래시 프로그래밍
- HTML5
- AS3.0
- programming
- 크리스탈큐브
- 리액트네이티브
- SSL
- 코드이그나이터
- 리액트
- 에러
- 워치 #페이스 #스튜디오 #워치페이스스튜디오 #watchfacestudio #wfs #워치오류 #워치연결안됨
- 액션스크립트
- Today
- Total
내맘대로 라이프
[AS3.0] 배열 랜덤하게 재정렬하기 본문
배열안의 내용물을 랜덤하게 섞는 함수입니다.
이래저래 쓸만한게 없어서 이거저거 보다가 만들었습니다.
var myArray:Array = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
function randomArray(targetArray:Array):Array {
var tempArray:Array = new Array();
var maxLength = targetArray.length
var mainArray = targetArray.concat();
for (var i = 0; i < maxLength; i++) {
var tempNum:int = Math.random() * mainArray.length;
var targetNum = mainArray[tempNum];
mainArray.splice(tempNum, 1);
tempArray.push(targetNum);
}
return tempArray;
}
myArray라는 배열을 하나 만들고 0~11까지 넣어줍니다. (안에 내용물은 숫자가 아니더라도 관계 없어요)
그다음 랜덤 어레이를 만들어서
섞은 내용을 임시 저장할 temp배열을 만들고
배열의 총 길이를 숫자로 따로 저장합니다 (밑의 for문에 targetArray.length를 넣어주게되면 targetArray의 길이는 점점 줄어들기 때문에
for문이 일찍 끊겨버립니다)
그다음 for문을 돌려서 타겟배열의 길이만큼 랜덤을 돌려서 그걸 정수값으로 변환한 다음에 타겟배열의 tempNum번째의 배열값을
따로 저장합니다.
그런담에 타겟배열의 tempNum번째의 배열값을 삭제하고 아까 저장한 targetNum(랜덤으로 뽑아온 타겟 배열의 배열값)을
temp배열에 차례로 넣어주는거죠
전부 완료되면 리턴~
중요한 점은 var mainArray 라는걸 하나 생성해서 원본 배열을 concat해줘야한다는 점입니다.
splice는 기존 배열에서 요소를 삭제하는 것이기 때문에 concat을 하지 않고
var mainArray = targetArray 이런식으로 해주면
mainArray를 splice해도 원본 배열이 삭제가 됩니다.
concat은 복제이기 때문에 완전히 별개의 배열이 되는 겁니다.
그래서 원본 배열이 삭제되지 않죠
여러번 반복해서 랜덤으로 돌려야할때는 꼭 필요합니다.