Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从c中的给定数生成随机数#_C#_Arrays_Random - Fatal编程技术网

C# 从c中的给定数生成随机数#

C# 从c中的给定数生成随机数#,c#,arrays,random,C#,Arrays,Random,用户在10文本框中输入数字,我将它们发送到一个数组中。现在我想从这个数组中生成随机数。我能做什么?使用数组中的值创建标准类?如果需要随机数依赖于所有数组项,则只需对它们进行异或运算 public static Random BuildSeededRandom(int[] data) { if ( data == null || data.Length < 1 ) return new Random(); int xor = 0; foreach (

用户在10文本框中输入数字,我将它们发送到一个数组中。现在我想从这个数组中生成随机数。我能做什么?

使用数组中的值创建标准类?如果需要随机数依赖于所有数组项,则只需对它们进行异或运算

public static Random BuildSeededRandom(int[] data)
{
    if ( data == null || data.Length < 1 )
        return new Random();

    int xor = 0;
    foreach ( var i in data )
        xor ^= i;

    return new Random(xor);
}
publicstaticrandom-buildseedrandom(int[]数据)
{
if(data==null | | data.Length<1)
返回新的Random();
int-xor=0;
foreach(数据中的var i)
xor^=i;
返回新的随机数(xor);
}
使用数组中的值的标准类?如果需要随机数依赖于所有数组项,则只需对它们进行异或运算

public static Random BuildSeededRandom(int[] data)
{
    if ( data == null || data.Length < 1 )
        return new Random();

    int xor = 0;
    foreach ( var i in data )
        xor ^= i;

    return new Random(xor);
}
publicstaticrandom-buildseedrandom(int[]数据)
{
if(data==null | | data.Length<1)
返回新的Random();
int-xor=0;
foreach(数据中的var i)
xor^=i;
返回新的随机数(xor);
}
类似这样的内容:

public class Randomizer<T>
{
    private readonly Random _random = new Random();
    private readonly IList<T> _numbers;
    public Randomizer(IList<T> numbers)
    {
        _numbers = numbers;
    }

    public T Next()
    {
        int idx = _random.Next(0, _numbers.Count);
        return _numbers[idx];
    }
}
请注意,代码不是线程安全的,因此如果可以从多个线程同时调用
下一个
方法,则应实现一些锁定。

类似以下内容:

public class Randomizer<T>
{
    private readonly Random _random = new Random();
    private readonly IList<T> _numbers;
    public Randomizer(IList<T> numbers)
    {
        _numbers = numbers;
    }

    public T Next()
    {
        int idx = _random.Next(0, _numbers.Count);
        return _numbers[idx];
    }
}

请注意,代码不是线程安全的,因此,如果可能从多个线程同时调用
下一个
方法,则应实现一些锁定。

是否要从随机数中选取随机数;或者将数组用作随机数生成器的“种子”?然后查看我的答案(如果它解决了您的问题,请接受它)。等等。。。所以你想洗牌数组,而不是给PRNG种子?你想从aray中挑选随机数;或者将数组用作随机数生成器的“种子”?然后查看我的答案(如果它解决了您的问题,请接受它)。等等。。。所以你想洗牌数组,而不是给PRNG种子?好的,它可以工作,但我想踢随机发生器从数组中生成的数字,以避免重复。@ActuallyMAB:那么你说的是洗牌数组()。你能澄清一下当所有数组数都耗尽时会发生什么吗?它是否应该改组和重新启动?或者抛出异常?实际上我不想重复数字。例如,结果不能是这样的:5-9-5-12。好的,它可以工作,但我想踢随机数发生器从数组中生成的数字,以避免重复。@ActuallyMAB:那么你说的是洗牌数组()。你能澄清一下当所有数组数都耗尽时会发生什么吗?它是否应该改组和重新启动?或者抛出异常?实际上我不想重复数字。例如,结果不能是这样的:5-9-5-12。
public class Randomizer<T>
{
    private readonly Shuffler _shuffler = new Shuffler();
    private readonly IList<T> _numbers;
    public Randomizer(IList<T> numbers)
    {
        _numbers = new List<T>(numbers);
        _shuffler.Shuffle(_numbers);
    }

    volatile int idx = 0;
    public T Next()
    {
        if (idx >= _numbers.Count)
        {
            _shuffler.Shuffle(_numbers);
            idx = 0;
        }

        return _numbers[idx++];
    }
}