TO reformer((问自己最不懂的问题)) :不是这样理解的,不能重复的标准是主键不同(PK_ID)。如果你想要的是varchar或者nvarchar类型的数据不能重复的话,你只能手动去比对了(效率好象也不低的)ArrayList al = new ArrayList(); for(int i=0;i<10;i++)//假设你要取10条随机记录 { Random rad=new Random(DateTime.Now.Millisecond); Int32 k = Random.Next(0,19); DataRow[] dr= DataTable.Select("PK_ID="+k.ToString().Trim());//PK_ID是主键 al.Add(str); }
int[] xxx=new int[100];
for(int i=0;i<100;i++)xxx[i]=i;
int[] resault=new int[你要选取的数量];
for(int i=0;i<你要选取的数量;i++)
{//随机找到数组中的一位数字,把它数组中包含的数字提取出来,然后把选取过的数字与最后一位数组内数字互换,下次选取的时侯radom范围在0-99数组之间的数字,下次0-98数组,....
int temp=Radom(0,100-i);
resault[i]=xxx[temp];
xxx[temp]=xxx[100-i];
}
你的意思,是我的表中要有一个主键?可是DataTable中有一个游标的了。以游标作为关键字段行不行。
比如,我共有20条记录,要随机抽取3条。不能重复,是否这样可以:
ArrayList al = new ArrayList();
for(int i=0;i<3;i++)
{
int k = Random.Next(0,19);
string str = DataTable.Rows[k]["name"].ToString();
al.Add(str);
}好像不行吧?
谢谢。
我使用的是Assess数据库,能否从直接随机从数据库读取n条数据?
for(int i=0;i<10;i++)//假设你要取10条随机记录
{
Random rad=new Random(DateTime.Now.Millisecond);
Int32 k = Random.Next(0,19);
DataRow[] dr= DataTable.Select("PK_ID="+k.ToString().Trim());//PK_ID是主键
al.Add(str);
}
我用的是数学方法,如果你数据库中有n条记录,你要从0-n内选出x1,x2,x3....
那么就这麽写:其中n是你的记录总数,m是你要生成的随即数数量,
在resault[0-m]内存贮的就是随机不重复的记录顺序号了.
int[] xxx=new int[n];
for(int i=0;i<n;i++)xxx[i]=i;
int[] resault=new int[m];
for(int i=0;i<m;i++)
{//随机找到数组中的一位数字,把它数组中包含的数字提取出来,然后把选取过的数字与最后一位数组内数字互换,下次选取的时侯radom范围在0-99数组之间的数字,下次0-98数组,....
int temp=Radom(0,n-i);
resault[i]=xxx[temp];
xxx[temp]=xxx[n-i];
}
然后缩小选择范围,继续随机生成,所以不用比对,直接生成~
我能理解你的意思。
谢谢