关于C#数组的。。。。。。。

来源:百度知道 编辑:UC知道 时间:2024/06/21 23:38:35
我想创建一个长度为26的int类型数组
int[] num = new int[26];
里面所有的元素都是随即产生的,范围是0到25!
Random random = new Random();
num[i] random.Next(26);
关键的部分到了
我要里面的所有元素都不能相等!!!!而且包含0到25!!!!!
谢谢各位大大了!!!!!
for (int j = x; j < 7 - 1 - i; j++)
num[j] = num[j + 1];
一楼的你这样我就看不懂了,这段是不是多余的?

int[] num = new int[] { 1, 2, 3, 4, 5, 6, 7 };
int[] reslt = new int[7];
for (int i = 0; i < 7; i++)
{
int x = new Random().Next(7-i);
reslt[i] = num[x];
for(int j=x;j<7-1-i;j++)
num[j] = num[j+1];

}
我这是7个数,你可以看看,这种方法效率最高

解释一下,7个数1,2,3,4,5,6,7
随机到了3的话,就把3后面的往前移一位num[j] = num[j+1];
数组变成1,2,4,5,6,7,7
第二次随机,随机数范围缩小1位就是Next(7-i);,就是只随机数组的前6位
等于扑克牌一样,随机到一张牌就抽掉那一张,再从剩下的牌里抽,
,这样就不会有重复,而且不用去比对
像他们的方法还需要拿随机出来的数
到数组里去比对,如果 存在了再随机一次,直到不重复,
开始可能会很快,但是如果数多的话,会非常慢
比如数大到10000,其他全部出来了只剩下9999了,你要随机出9999,只有万分之一的几率,可能搞几十分钟都搞不出来,你试试就知道

通用方法
/// <summary>
/// 产生一组不重复的随机数
/// </summary>
public static int[] SuiJiSuZu(int MinValue, int MaxValue, int Length)
{
if (MaxValue - MinValue + 1 < Length)
{
return null;
}
Random R = new Random();
Int32 SuiJi = 0;
Int32 suijisuzu = new Int32[Length];