我的思想是 给出两个 输入框 比如第一个是输入 A000001 第一个输入A000400 点击生成 就生成这个阶段的数字。不要重复。有代码更好。
解决方案 »
- 怎么比较两个数组
- WebForm_SaveScrollPositionSubmit 未定义
- 求高手指引js显示textbox问题
- 如何让文件可以被查看,但不可以被下载
- 为什么这样更新数据不行?求原理
- 无限分类在下拉列表框中树型显示
- 可以这样赋值吗?好着急
- 请教有经验的高手
- 为什么TreeView1.getTreeNode("0"),可以,但i=0,TreeView1.getTreeNode(i)不行,需要什么样的转换
- 讨论:到底要多大内存多快CPU多快硬盘多好主板才能使visual studio .net运行流畅啊!?
- 如何在SQL SERVER中某字段追加一个值
- datalist将一个字段里的值以表格的形式显示
http://topic.csdn.net/u/20090216/09/cbd204fb-4312-4977-8e34-644a6958750a.html
int end = int.Parse("01342");Random rdm = new Random();
List<int> container = new List<int>();for (int i=0; i< 500; ++i)
container.Add(rdm.Next(begin, end));foreach(int i in container)
Console.WriteLine(i);
Console.WriteLine("".PadLeft(10, '-'));// 利用linq的Distinct()剔除重复项
var result = container.Distinct();
foreach(int i in result)
Console.WriteLine(i);// 如果显示false,表明有重复项。
Console.WriteLine(container.ToArray().Length == result.ToArray().Length);
int begin = int.Parse("00100");
int end = int.Parse("00500"); Random rdm = new Random();
List<int> container = new List<int>(); for (int i = 0; i < 500; ++i)
container.Add(rdm.Next(begin, end)); foreach (int i in container)
Response.Write(i);
Response.Write("".PadLeft(10, '-')); // 利用linq的Distinct()剔除重复项
var result = container.Distinct();
foreach (int i in result)
Response.Write(i); // 如果显示false,表明有重复项。
Response.Write(container.ToArray().Length == result.ToArray().Length); 我修改之后 测试几次 发现 有时候 有 false 也就是重复。
利用linq的Distinct()剔除重复项 这个明白
var repeats = container.GroupBy(i=>i).Select(o=>new {i=o.Key, count = o.Count()}).Where(r=>r.count>1).Select(x=>x.i);然后,我想说,重复项肯定是会有的。你的要求不就是取没有重复的项吗?我上面的例子里,result里存放的就是非重复的值。你的要求是每次按键产生一个不重复的随机数。那就在Click事件里加一个判断吧。大致如下。其中各种变量声明要考虑好。
int newid;
do
{
newid = random.Next(begin, end);
}while (result.Contains(newid) && (result.ToArray().Length < (end-begin)));result.Add(newid);
Queue<string> codePool = new Queue<string>();
int beginNum = 1;
int endNum = 40;
var codes = Enumerable.Range(beginNum, endNum).Select(i => string.Format("A{0:0000}", i))
.OrderBy(c => Guid.NewGuid().GetHashCode()).ToList();
codes.ForEach(c => codePool.Enqueue(c));
Console.WriteLine(codePool.Dequeue());
Console.WriteLine(codePool.Dequeue());
Console.WriteLine(codePool.Dequeue());
Console.WriteLine(codePool.Dequeue());
Console.WriteLine(codePool.Dequeue());
var repeats = container.GroupBy(i=>i).Where(g => g.Count()>1).Select(o=>o.Key);基本的思路:还是构造一个List,存放所有已产生的随机数。遇到新产生一个随机数,先比较是否已经在List中。有则抛弃,没有则添加进List,直到List满。
{
Set_Random();
}
/// <summary>
/// 产生不重复随机数的方法
/// </summary>
/// <param name="minValue">最小值</param>
/// <param name="maxValue">最大值</param>
/// <param name="count">共产生多少随机数</param>
/// <returns>int[]数组</returns>
public int[] GetRandomUnrepeatArray(int minValue, int maxValue, int count)
{
Random rnd = new Random();
int length = maxValue - minValue + 1;
byte[] keys = new byte[length];
rnd.NextBytes(keys);
int[] items = new int[length];
for (int i = 0; i < length; i++)
{
items[i] = i + minValue;
}
Array.Sort(keys, items);
int[] result = new int[count];
Array.Copy(items, result, count);
Response.Write(result);
return result;
}
public void Set_Random()
{
//调用产生随机数的方法产生的数据数是1111111到9999999之间的随机数输出10个
int[] items = GetRandomUnrepeatArray(111111, 999999, 10);
Response.Write(items);
}
请大家看看我这个代码 问题出在哪里 输出的是System.Int32[]
int beginNum = 1;
int endNum = 40;
var codes = Enumerable.Range(beginNum, endNum).Select(i => string.Format("A{0:0000}", i))
.OrderBy(c => Guid.NewGuid().GetHashCode()).ToList();
codes.ForEach(c => codePool.Enqueue(c));判断Session里如果Pool存在且Count>0则Dequeue取一次值。
{
return Enumerable.Range(min, max).OrderBy(c => Guid.NewGuid().GetHashCode()).Take(count).ToArray();
}这个能保证你取的count内没重复。
最后我的代码是这样处理的。希望和大家分享
protected void Page_Load(object sender, EventArgs e)
{
Set_Random();
}
///
/// 产生不重复随机数的方法
///
/// 最小值minValue
/// 最大值maxValue
/// 共产生多少随机数
/// int[]数组
public int[] GetRandomUnrepeatArray(int minValue, int maxValue, int count)
{
Random rnd = new Random();
int length = maxValue - minValue + 1;
byte[] keys = new byte[length];
rnd.NextBytes(keys);
int[] items = new int[length];
for (int i = 0; i < length; i++)
{
items[i] = i + minValue;
}
Array.Sort(keys, items);
int[] result = new int[count];
Array.Copy(items, result, count);
return result;
}
public void Set_Random()
{
//调用产生随机数的方法产生的数据数是1111111到9999999之间的随机数输出10个
int[] items = this.GetRandomUnrepeatArray(1, 500, 500);
for (int i = 0; i < items.Length; i++)
{ Array.Sort(items);//排序
Response.Write("产生的随机数是:"+"B000" + items[i] + "");
Response.Write("<br/>".ToString());
} }
}