C#에서는 1에서 5까지 고유 한 값을 포함해야하는 5 개의 난수 목록을 원합니다. 어떻게하면 될까요? 예를 들어고유해야하는 난수 목록을 얻는 방법
: 1,3,2,5,4 또는
목록에 반드시 5
1에서 숫자를 가지고해야한다 (5 개) 임의의 숫자를 포함, 즉 2,5,1,3,4C#에서는 1에서 5까지 고유 한 값을 포함해야하는 5 개의 난수 목록을 원합니다. 어떻게하면 될까요? 예를 들어고유해야하는 난수 목록을 얻는 방법
: 1,3,2,5,4 또는
목록에 반드시 5
1에서 숫자를 가지고해야한다 (5 개) 임의의 숫자를 포함, 즉 2,5,1,3,4필요한 것은 shuffling입니다. 내가 연결 한 피셔 - 예이츠 셔플은 선형 시간에 그렇게 할 수있게 해줍니다. 그게 최선의 결과입니다.
는 C#에서 그렇게하려면, 당신도 확장 메서드를 구현할 수 있습니다, 그것은 다음과 같이 표시됩니다public static Random rand = new Random();
public static List<T> Shuffle<T>(this List<T> original)
{
List<T> lst = new List<T>(original);
for (int i = lst.Count - 1; i >= 0; i--)
{
int j = rand.Next(0, i + 1);
T tmp = lst[j];
lst[j] = lst[i];
lst[i] = tmp;
}
return lst;
}
하고 그것을 호출!
var shuffled = lst.Shuffle();
'rand.Next (0, i + 1)'은 첫 번째 루프 인 경우'i + 1'을 생성 할 수 있으며 이는'j = lst.Count'를 의미하고'lst [j]'는'ArgumentOutOfRangeException'을 던집니다 ? –
@KingKing 아니요. 두 번째 인수는 * exclusive *입니다. –
@KingKin "maxValue : 반환 된 난수의 배타적 인 상한값입니다." 두 번째 인수가 배타적이기 때문에 첫 번째 인수가 포함되어 있기 때문에 그렇지 않습니다. – Save
Random rnd = new Random();
var list = Enumerable.Range(1, 5).OrderBy(x => rnd.Next()).ToList();
임의의 값 = 무작위 섞인 고유 한 값 – Corak
참고 : http://ericlippert.com/2013/04/15/producing-permutations-part-one/ –
시도해 보셨습니까? 어떤 연구를 했습니까? 이 질문의 내용은 '아니오'를 의미합니다. –