ASP.NET随机不重复

来源:百度知道 编辑:UC知道 时间:2024/06/20 09:09:35
<%if (dt != null && dt.Rows.Count>0)
{
Random ro = new Random();
for(int j=0;j<4 && j<dt.Rows.Count;j++)
{
int k=ro.Next(dt.Rows.Count);
%>
<%=dt.Rows[k][COL_Clip_Id]%>
<%}}%>
我这样写老是输出K随机有重复
该怎么修改才能做到随机不重复呢 请指教!
问题就在这里啊 怎么修改呢
我这里需要循环

产生的随机数放到一个容器里面,每次产生都到里面搜一下有没有一样的,没有,就把新的加入到这个容器,并使用这个随机数;有,就重新获得随机数------这是描述起来最简单的算法

ro.Next(dt.Rows.Count)这样每次的值都是count内的任意值,count越小重复的可能性越大。 每取一个值都要把这个值排除才行。用一个列表记录没有选到的值。

参照以下:
int count = 10;

Random ro = new Random();
List<int> intList = new List<int>();
for(int i=0; i< count; i++)
{
intList.Add(i);
}
while(intList.Count>0)
{
int k=ro.Next(intList.Count-1);
// dt.Rows[intList[k]][COL_Clip_Id];
intList.RemoveAt(k);
}
刚才手写的。。。

因为Random所用的seed默认是系统时间,连续输出肯定会有重复的,下面是我以前写的一个获得随机密码的代码,参考一下你就明白了

public static string GetRnd(int Length)
{
byte[] rndBytes = new byte[4];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(rndBytes);

System.Random ran = new Random(BitConverter.ToInt32(rndBytes,0));
string ranpsw