相关疑难解决方法(0)

如何从Java中的HashSet中获取100个随机元素?

我有一个HashSet,其中我有10000个元素.我想从该HashSet中提取随机的100个元素.所以我认为我可以在套装上使用shuffle,但它不起作用.

Set<String> users = new HashSet<String>();

// for randomness, but this doesn't work
Collections.shuffle(users, new Random(System.nanoTime()));  

// and use for loop to get 100 elements
Run Code Online (Sandbox Code Playgroud)

我现在不能使用shuffle,有没有其他最好的方法从Java中获取HashSet中的100个随机元素?

java random set hashset

4
推荐指数
2
解决办法
4130
查看次数

从一组N中随机选择n条记录

我需要n从一组N(where 0 < n < N)中随机选择记录.

一种可能的算法是:

遍历列表并为每个元素,使选择的概率= (number needed) / (number left)

因此,如果您有40个项目,则第一个项目有5/40可能被选中.

如果是,下一个有4/39机会,否则它有5/39机会.当你到达目的地时,你会得到5件物品,而且在此之前你通常会拥有所有物品.

假设一个好的伪随机数发生器,这个算法是否正确?


注意

stackoverflow上有很多这类问题(其中很多都被标记为C#中List <T>中选择N个随机元素的重复).

上面的算法经常被提出(例如Kyle Cronin的答案)并且总是受到质疑(例如,见 这里,这里,这里,这里 ......).

我可以对此事做最后的决定吗?

algorithm correctness random-sample

3
推荐指数
1
解决办法
1035
查看次数

如何从数组中提取3个随机值?

我用以下代码构建MyObject数组:

    MyObject[] myObject = (from MyObject varObj in MyObjects
                           select varObj).ToArray();
Run Code Online (Sandbox Code Playgroud)

现在,我想从这个数组中提取3个随机MyObject!我怎么能在C#上做到这一点?

当然,如果数组长度<3,我需要提取所有对象!

c#

1
推荐指数
1
解决办法
315
查看次数

这个Guid是随机的还是可猜测的

我正在使用以下代码生成反CSRF令牌:

TokenCSRF = new Random(Guid.NewGuid().GetHashCode()).Next(1, 9999).ToString();
Run Code Online (Sandbox Code Playgroud)

这个令牌是可猜测的还是真正随机的?

编辑:我用这个替换了令牌生成器:

    byte[] byt = new byte[sizeof(Int32)];
    RNGCryptoServiceProvider rngCrypto = new RNGCryptoServiceProvider();

    rngCrypto.GetBytes(byt);

    return BitConverter.ToInt32(byt, 0);
Run Code Online (Sandbox Code Playgroud)

c#

1
推荐指数
1
解决办法
895
查看次数

标签 统计

c# ×2

algorithm ×1

correctness ×1

hashset ×1

java ×1

random ×1

random-sample ×1

set ×1