개발 관련/SW, App 관련
겹치지 않는 난수 뽑기
소서리스25
2023. 4. 24. 12:07
반응형
겹치지 않는 난수 뽑기
개발을 하다보면 가끔 겹치지 않는 난수가 필요한 상황이 발생한다.
여러가지 방법?이 있겠지만...
현재 사용하고 있는 방법은 아래와 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public static T[] ShuffleArray<T>(T[] array, int seed)
{
System.Random prng = new System.Random (seed);
for (int i = 0; i < array.Length-1; i++)
{
int randomIndex = prng.Next (i, array.Length);
T tempItem = array [randomIndex];
array [randomIndex] = array [i];
array [i] = tempItem;
}
return array;
}
|
cs |
결과는 seed 값에 따라 등록된 숫자나 문자를 겹치지 않게 잘 섞어준다.
아래와 같은 섞은 데이터를 확인 할 수 있다.
위의 결과를 얻는 전체 코드는 다음과 같으며 좀더 쉽게 결과를 확인 할 수 있다.
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
29
30
31
32
33
34
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ShuffleData : MonoBehaviour
{
string[] rndChar = {"A", "B", "C", "D", "E", "F", "G" };
int[] rndNum = { 1, 2, 3, 4, 5, 6, 7 };
void Start()
{
foreach(var x in ShuffleArray(rndNum, 1))
{
print(x);
}
}
public static T[] ShuffleArray<T>(T[] array, int seed)
{
System.Random prng = new System.Random(seed);
for (int i = 0; i < array.Length - 1; i++)
{
int randomIndex = prng.Next(i, array.Length);
T tempItem = array[randomIndex];
array[randomIndex] = array[i];
array[i] = tempItem;
}
return array;
}
}
|
cs |
예전에는 프로그램을 잘 모를때.. 지금도 그렇지만.. 아주 초보적인 방법을 썼었다.
if문으로 겹치지 않을때까지 반복했으니 그만큼 비효율적이었던 적이 있었다.
지금도 가끔 잘 모르니까 어떻게든 해결하고자 방법을 찾아보면 무식한 방법으로 밖에 할 수 없는 경우가 종종 생긴다.
반응형