c# - 将特定数字从一个序列添加到另一个序列

标签 c# sequence

我觉得这个任务不应该这样来完成...

我的 sequenceY 长度不等于 steam 数字的数量,因为您不能将 int[] 长度分配给以 0 作为起始值的 int。 因此我的 sequenceY 里面有很多 0,我无法打印整个序列。我什至尝试在 for 循环之后添加它:

sequenceY = new int[steamnumbercounter];

但它没有用......为什么?

我的另一个问题是程序员如何处理长度未知的序列?

我设法只打印了 steam 号码,但任务说打印 sequenceY 不仅是它的一部分。

// 4. sequenceX[20] is made of random numbers from 1 to 30 , 
// sequenceY is made of steam numbers from sequenceX. Print sequneceY.

int[] nizx = new int[20];
int[] nizy = new int[20];
int n = 0;
int steamnumbercounter = 0;
Random rnd = new Random();

for (int i = 0; i < nizx.Length; i++)
{
    nizx[i] = rnd.Next(1, 30);
    if (nizx[i]%2==0)
    {
        nizy[n] = nizx[i];
        n++;
        steamnumbercounter++;
    }

    Console.Write("{0} , ", nizx[i]);
}

for (int i = 0; i < steamnumbercounter; i++)
{
    Console.WriteLine("{0} , ",nizy[i]);
}

最佳答案

部分代码审查以及答案。

But it didn't work ... Why ?

该代码无效,因为您正在重新分配 sequenceY到一个全新的值。

My other question is how do programmers deal with sequences that have unknown length?

因此,有了这些知识,我们可以在这里做一些事情:创建一个数组并使用 Array.Resize , 使用 List<T> ,填充初始数组,然后将其交换为已填充的正确大小之一。

我假设“ Steam ”数是偶数。

你的命名不好:nizxnizy不要传达意思或与问题保持一致。

我将演示最后一个选项(因为您声明您还不知道如何在此类中使用 .NET 的许多适度复杂部分,这很好) :填充初始数组并将其交换为新数组。这将在 O(n^2) 中运行时间(排序)。


那么,让我们从源数组开始吧。

int[] sequenceX = new int[20];

接下来我们将定义目标数组与源数组大小相同。 (这是可以存储在其中的最大值数,我们稍后会缩小它。)

int[] sequenceY = new int[sequenceX.Length];

然后我们需要一个变量来保存我们找到的符合条件的数字数量:

int steamNumbers = 0;

最后,我们的 Random .

Random random = new Random();

然后,我们查看所有 sequenceX和你一样,但我们会稍微更新一下逻辑。

for (int i = 0; i < sequenceX.Length; i++)
{
    sequenceX[i] = random.Next(1, 30);

    if (sequenceX[i] % 2 == 0)
    {
        sequenceY[steamNumbers] = sequenceX[i];
        steamNumbers++;
    }
}

所以我们的代码看起来几乎和你的一样,但我们还有一件事要做:因为你想要sequenceY包含 steamNumbers我们必须缩小它或其他东西。

int[] tempSequenceY = sequenceY;
sequenceY = new int[steamNumbers];

for (int i = 0; i < steamNumbers; i++)
{
    sequenceY[i] = tempSequenceY[i];
}

现在sequenceY里面只有你的 Steam 号码。

最终代码:

int[] sequenceX = new int[20];
int[] sequenceY = new int[sequenceX.Length];
int steamNumbers = 0;
Random random = new Random();

for (int i = 0; i < sequenceX.Length; i++)
{
    sequenceX[i] = random.Next(1, 30);

    if (sequenceX[i] % 2 == 0)
    {
        sequenceY[steamNumbers] = sequenceX[i];
        steamNumbers++;
    }
}

int[] tempSequenceY = sequenceY;
sequenceY = new int[steamNumbers];

for (int i = 0; i < steamNumbers; i++)
{
    sequenceY[i] = tempSequenceY[i];
}

// Print your `sequenceY` here.

你也可以很容易地将它提取到一个方法中:

public int[] GetSteamNumbers(int sequenceCount, int randomMinimum, int randomMaximum)
{
    int[] sequenceX = new int[sequenceCount];
    int[] sequenceY = new int[sequenceX.Length];
    int steamNumbers = 0;
    Random random = new Random();

    for (int i = 0; i < sequenceX.Length; i++)
    {
        sequenceX[i] = random.Next(randomMinimum, randomMaximum);

        if (sequenceX[i] % 2 == 0)
        {
            sequenceY[steamNumbers] = sequenceX[i];
            steamNumbers++;
        }
    }

    int[] tempSequenceY = sequenceY;
    sequenceY = new int[steamNumbers];

    for (int i = 0; i < steamNumbers; i++)
    {
        sequenceY[i] = tempSequenceY[i];
    }

    return sequenceY;
}

然后调用它:

int[] steamNumbers = GetSteamNumbers(20, 1, 30);

当然,对于更高级的用户(这对没有帮助,但可能对其他人有帮助)我们可以使用 LINQ 执行如下操作:

var random = new Random();
var sequenceY = Enumerable.Range(1, 20)
                          .Select(x => random.Next(1, 30))
                          .Where(x => x % 2 == 0)
                          .ToArray();

应该是一样的效果。 (只是证明 C# 在未来还有值得期待的东西。)

免责声明:我在 IDE 之外编写了整个答案,并没有实际编译它,我不保证代码的准确性,但过程本身应该相当简单。

关于c# - 将特定数字从一个序列添加到另一个序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41332204/

相关文章:

c# - XNA 游戏在 "dragging"窗口时不更新,任何事件处理程序?

javascript - 如何使用 C# 从可编辑的 div 内容中获取文本

tcp - TCP序列号是如何存储的?

r - 使用 R 从列中提取序列

c# - 一行 wpf 的 Datagrid ObservableCollection

c# - 如何支持 UWP InkCanvas 的多个手写笔输入?

c# - gridview edititem 模板内的日历控件

python - 透明地将数字类型处理为单值序列(反之亦然)

Python 序列 id 到 mysql 与文本

java - 使用递归打印先倒数再向上的对称整数序列