C# 生成具有成对数字的数组
我有以下代码:C# 生成具有成对数字的数组,c#,arrays,C#,Arrays,我有以下代码: Random num = new Random(); int check = CheckIfOdd(num.Next(1, 1000000)); int counter = 1; while (check <= 0) { if (check % 2 == 0) { check
Random num = new Random();
int check = CheckIfOdd(num.Next(1, 1000000));
int counter = 1;
while (check <= 0)
{
if (check % 2 == 0)
{
check = CheckIfOdd(num.Next(1, 1000000)); ;
}
counter++;
}
int[] nArray = new int[check];
int arLength = 0;
//generate arrays with pairs of numbers, and one number which does not pair.
for (int i = 0; i < check; i++)
{
arLength = nArray.Length;
if (arLength == i + 1)
{
nArray[i] = i + 1;
}
else
{
nArray[i] = i;
nArray[i + 1] = i;
}
i++;
}
通过“神秘性”尝试以下代码:
int[] output = Enumerable.Range(0, 11).Select(x => x / 2).ToArray();
它生成具有以下值的数组:
{ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5 }
您应该能够将其扩展到所需的任意多个元素
如果希望以随机顺序输出,请尝试以下操作:
Random r = new Random();
int[] output = Enumerable.Range(0, 11).Select(x => x / 2).OrderBy(x => r.Next()).ToArray();
在一次运行中,作为一个示例,我得到了以下结果:
{ 0, 4, 1, 2, 2, 4, 5, 3, 3, 1, 0 }
要使用单个元素生成大量随机对,可以执行以下操作:
Random r = new Random();
int pairs = 5; //elements = 2 * pairs + 1;
int max = 100;
int[] output =
Enumerable
.Range(0, pairs)
.Select(x => r.Next(1, max + 1))
.SelectMany(x => new [] { x, x })
.StartWith(r.Next(1, max + 1))
.OrderBy(x => r.Next())
.ToArray();
但是,这并不能保证最终不会出现3、4或更多数量的碰撞
这不需要“System.Interactive”: 请尝试以下代码:
int[] output = Enumerable.Range(0, 11).Select(x => x / 2).ToArray();
它生成具有以下值的数组:
{ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5 }
您应该能够将其扩展到所需的任意多个元素
如果希望以随机顺序输出,请尝试以下操作:
Random r = new Random();
int[] output = Enumerable.Range(0, 11).Select(x => x / 2).OrderBy(x => r.Next()).ToArray();
在一次运行中,作为一个示例,我得到了以下结果:
{ 0, 4, 1, 2, 2, 4, 5, 3, 3, 1, 0 }
要使用单个元素生成大量随机对,可以执行以下操作:
Random r = new Random();
int pairs = 5; //elements = 2 * pairs + 1;
int max = 100;
int[] output =
Enumerable
.Range(0, pairs)
.Select(x => r.Next(1, max + 1))
.SelectMany(x => new [] { x, x })
.StartWith(r.Next(1, max + 1))
.OrderBy(x => r.Next())
.ToArray();
但是,这并不能保证最终不会出现3、4或更多数量的碰撞
这不需要“System.Interactive”:
那么您正在为这个编写单元测试;)?是的,有点,但我想优化我的代码
arLength=nArray.Length
这将始终完全等于check
,因为这是您定义的数组长度。数组的长度不考虑您向其中添加了多少内容,它只考虑您请求的长度。使用此值生成已排序的集合,然后随机化。将这样的任务分解成更小的部分通常比一次完成更容易。下面是关于随机集合的另一个问题的答案:那么您正在为这个问题编写单元测试;)?是的,有点,但我想优化我的代码arLength=nArray.Length
这将始终完全等于check
,因为这是您定义的数组长度。数组的长度不考虑您向其中添加了多少内容,它只考虑您请求的长度。使用此值生成已排序的集合,然后随机化。将这样的任务分解成更小的部分通常比一次完成更容易。下面是关于随机集合的另一个问题的答案:如果我想要100-100万个元素,数字在10-10亿之间。我怎样才能做到这一点?据我所知,如果我将范围设置为0-1亿,它将生成介于这两者之间的数字,但最多可达5亿个元素。这是正确的吗?@andrelange91-你可能需要更清楚地解释你需要什么。基于您问题中的算法,我的代码似乎要么适合,要么您可以对其进行相当简单的调整以适应。然而,我不明白你怎么能像你要求的那样把数字配对,从0
(for(int I=0;I
)开始,就像你在你的代码中那样,有多达100万个元素和多达10亿的数字。这根本没有道理。你能解释得更清楚些吗?很抱歉我不够清楚,我需要一个随机的元素量,即{0,1,2,3,4}@andrelange91-我添加了一个答案,这个答案几乎符合你的要求。碰撞,意味着会有更多的单个数字?如果我想要100-100万个元素,数字在10-10亿之间。我怎样才能做到这一点?据我所知,如果我将范围设置为0-1亿,它将生成介于这两者之间的数字,但最多可达5亿个元素。这是正确的吗?@andrelange91-你可能需要更清楚地解释你需要什么。基于您问题中的算法,我的代码似乎要么适合,要么您可以对其进行相当简单的调整以适应。然而,我不明白你怎么能像你要求的那样把数字配对,从0
(for(int I=0;I
)开始,就像你在你的代码中那样,有多达100万个元素和多达10亿的数字。这根本没有道理。你能解释得更清楚些吗?很抱歉我不够清楚,我需要一个随机数的元素,即{0,1,2,3,4}@andrelange91-我添加了一个答案,这个答案几乎符合你的要求。碰撞,意味着最终会有更多的单个数字?