? "
그 한 가지 가능한 대안 (그리고 내가 좋아하는 이유는이 대답을 작성한 이유입니다)은 상기 범위 (또는 설정)를 구축하고 shuffle the items을 작성한 다음 첫 번째 N 개 항목을 가져 오는 것입니다.
피셔 - 예이츠 셔플 구현은 in this answer입니다. 약간의 상황에 대한 정리 :
void Shuffle (int arr[]) {
Random rnd = new Random();
for (int i = arr.Length; i > 1; i--) {
int pos = rnd.Next(i);
var x = arr[i - 1];
arr[i - 1] = arr[pos];
arr[pos] = x;
}
}
// usage
var numbers = Enumerable.Range(0,10).ToArray();
Shuffle(numbers);
int getRanNum1 = numbers[0];
int getRanNum2 = numbers[1];
우리가 만 N (2) 요소가 선택되고 있다는 것을 알고 있기 때문에, 위의 Shuffle
방법은 실제로 단지 N (2) 교환이 완료되도록 수정할 수 있습니다. 이는 각 i
에 대해 arr[i - 1]
이 (자체와 교체 될 수는 있지만) 한 번만 스왑되기 때문입니다. 어쨌든, 이것은 독자를위한 운동으로 남겼습니다.
'getRanNum2'가 조금 덜 랜덤하다는 것을 알고 계십니까? 특히 '0..9'와 같은 작은 범위. –