尝试对不包含所有元素的数组列表进行排序

本文关键字:列表 数组 排序 元素 包含所 | 更新日期: 2023-09-27 18:35:15

我创建的数组有 20 个元素,但代码不要求用户同时输入所有 20 个项目。他们可以输入任意数量的低于 20 的项目,然后单击按钮以显示到目前为止输入的值。

我可以弄清楚如何

对数组进行排序,以及如何显示所有 20 个元素,但我无法弄清楚如何调整我的代码以仅显示他们输入的值。使用下面的代码,如果用户只输入 20 个元素中的 5 个,他们会得到一大堆 0 以及它们的值。

 private void btnDisplayScore_Click(object sender, EventArgs e)
    {
        string scoresString = "";
        foreach (int s in scores)
            scoresString += s + "'n";
        MessageBox.Show(scoresString, "Sorted Scores");
        txtScore.Focus();
    }

抱歉,如果这是一个愚蠢的问题,我才刚刚开始编程。

尝试对不包含所有元素的数组列表进行排序

您可以使用

Sort(T[] array, int from, int length) 的重载,该重载需要另外两个参数,指示要排序的子数组的初始索引和长度。例如,如果用户输入了K元素,则可以按如下方式对范围从零到K进行排序:

int[] myArray = new int[20];
int K = ... // This variable is set to the number of items the user enters
Array.Sort(myArray, 0, K);

更好的解决方案是在知道数组将有多少个元素之前避免调整数组的大小。最好的解决方案是使用允许您动态添加项目的容器,例如 List<T> .

使用某种List数据结构,例如 List<T>而不是数组。

几种方法可以用于此目的。 您可以使用List而不是数组来存储分数。 列表没有固定大小,因此您需要添加一些代码来防止用户输入超过 20 个项目。

如果您想继续使用数组,则可以向程序添加第二个变量来跟踪用户输入的项目数,例如itemCount。 然后,您可以使用 Array.Sort 的重载仅对数组中填充的值进行排序,并且可以将foreach循环更改为仅循环访问实际输入的值的for循环。

for (int ct = 0; ct < itemCount; ct++)
{
    scoresString += s + "'n";
    ' etc
}

使用列表,对其进行排序,然后显示

        List<int> i = new List<int>();
        i.Add(20);
        i.Add(4);
        i.Add(2);
        i.Add(5000);
        i.Add(65);
        i.Sort();
        foreach (int ii in i)
        {
            Console.WriteLine(ii);
        }
        Console.ReadLine();

这对你有用吗?

private void btnDisplayScore_Click(object sender, EventArgs e)
{
    MessageBox.Show(String.Join("'n",
        scores
            .Where(s => s > 0)
            .OrderBy(s => s)), "Sorted Scores");
    txtScore.Focus();
}