2011-07-02 5 views
0

자바 스크립트에서 해당 범위의 모든 숫자에 대해 특정 범위의 고유 한 임의의 정수를 얻는 방법은 무엇입니까?

내가 가지고 :

function getRandomInt(min, max){ 
     return Math.floor(Math.random() * (max - min + 1)) + min; 
} 

하지만 문제는 배열에 요소가있는 무언가의 인구를 randomise 싶습니다 (그래서 그들은 같은 순서로 채울 것입니다 때마다 나타나지 않는다) 필요가 그래서 지금까지 다른 숫자와 비교하여 반환 된 숫자가 고유한지 확인하십시오.

그래서 대신 :

 for(var i = 0; i < myArray.length; i++) { 

    } 

가지고 :

var i; 
var count = 0; 
while(count < myArray.length){ 
    count++; 
    i = getRandomInt(0, myArray.length); // TODO ensure value is unique 

    // do stuff with myArray[i]; 
} 

답변

3

이 아니라 독립적 인 균일 한 난수 것보다 오히려 임의 순열 집합 {1, 2을 원하는 것 같습니다, 3, ..., N}. 제 생각에는 배열을위한 shuffle 배열이 있다고 생각합니다. 잡아 당겨 전에 셔플하지 않는 것입니다,하지만로 셔플 때로는

function shuffle(array) { 
    var top = array.length; 
    while (top--) { 
     var current = Math.floor(Math.random() * top); 
     var tmp = array[current]; 
     array[current] = array[top - 1]; 
     array[top - 1] = tmp; 
    } 
    return array; 
} 
+0

자네 말이 맞아 : 다음 예는 방법을 보여줍니다! 내가 답변으로 표시 할 수 있도록 코드를 포함 할 수 있습니까? function shuffle (array) { var tmp, current, top = array.length; if (top) while (- top) { current = Math.floor (Math.random() * (top + 1)); tmp = 배열 ​​[현재]; 배열 [현재] = 배열 ​​[맨 위]; 배열 [위쪽] = tmp; } return array; } – markmnl

2

(예를 들어 카드 덱을) 뭔가를 무작위 수있는 가장 좋은 방법 :

요청으로

, 여기에 코드 예제 너는 그것을 꺼내.

은 당신이 말 :의 말에 나는 말을 감소하기 때문에

function drawNumber() { 
    // set index to draw from 
    var swap, 
     drawIndex = Math.floor(Math.random() * (endNum+ 1)); 

    // swap the values at the drawn index and at the "end" of the deck 
    swap = array[drawIndex]; 
    array[drawIndex] = array[endNum]; 
    array[endNum] = swap; 

    endNum--; 
} 

그려진 항목은 "삭제"됩니다 카운터 :

var i, 
    endNum = 51, 
    array = new Array(52); 
for(i = 0; i <= endNum; i++) { 
    array[i] = i; 
} 

그런 다음이 같은 기능을 쓸 수 있습니다 randomize 함수는 0부터 실행 가능한 것으로 끝나는 항목 만 처리합니다.

이것은 내가 사용했던 일반적인 패턴입니다. 이전에 C#으로 간단한 카드 게임을 작성한 이후로 js에 잘못 채택했을 수도 있습니다. 실제로 나는 그것을 보았고 나는 int ____ 대신 var ____을 가지고있었습니다.

1

함수를 Array.Sort 메서드에 전달할 수 있습니다. 이 함수가 무작위로 0보다 크거나 작은 값을 반환하면 배열이 무작위로 정렬됩니다.

myarray.sort(function() {return 0.5 - Math.random()}) 

은 모든 난수가 고유한지 여부에 대해 걱정할 필요없이 트릭을 수행해야합니다.

루프가없고 매우 간단합니다.

2

잘 이해하면 정수 배열이 필요하지만 임의로 정렬됩니다. 그런 다음

function randOrd(){ 
return (Math.round(Math.random())-0.5); } 

를 배열을 무작위 :

하는 방법입니다

은 첫째는 RAND 함수를 만들

here을 설명 할 수 있습니다.도움이됩니다

anyArray = new Array('1','2','3','4','5'); 
anyArray.sort(randOrd); 
document.write('Random : ' + anyArray + '<br />';); 

희망,

감사합니다,

최대

관련 문제