다음을 시도하고 있습니다.
List가 있고 특정 범위에서 새 int를 생성하고 싶지만 값이 이미 List에 정의되어있을 수 없다고 가정 해 보겠습니다.
List<int> PredefinedIntsList = new List<int>() { 1, 3, 4, 8, 9 };
Random rnd = new Random();
int NewRandomValue = rnd.Next(0, 10);
rnd.Next (분명히) 1, 3, 4, 8 또는 9가 나옵니다.하지만 2, 5, 6, 7 또는 10 만 반환하기를 원합니다.
어떤 아이디어?
언제나처럼 LINQ는 당신의 친구입니다.
[TestMethod]
public void RandomTest()
{
var except = new[] {1, 2, 3, 5};
GetRandomExcept(1, 5, except).Should().Be(4);
}
private static int GetRandomExcept(int minValue, int maxValue, IEnumerable<int> except)
{
return GetRandoms(minValue, maxValue).Except(except).First();
}
private static IEnumerable<int> GetRandoms(int minValue, int maxValue)
{
var random = new Random();
while (true) yield return random.Next(minValue, maxValue);
}
그냥 당신이 전화를 안 않는다는 것을 명심 GetRandoms().ToArray()
나 .Max()
또는 .OrderBy()
당신이 무한 루프를 얻을 영원히 불규칙적을 생성하기 때문에, 등등합니다.
그래도 할 수있는 것은 GetRandoms().Take(10).ToArray()
배열에서 다음 10 개의 임의의 정수를 가져 오는 호출 입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다