C# 使用Array.Sort()对元素进行排序不排序第一个元素

C# 使用Array.Sort()对元素进行排序不排序第一个元素,c#,arrays,sorting,C#,Arrays,Sorting,我一直在使用Array.Sort()对字符串数组进行排序,但出于某种原因,它保留了数组的第一个元素,并且输出不按顺序进行 private void quicksort1_Click(object sender, EventArgs e) { String[] parts = new String[1000]; //System.IO.StreamReader file = new System.IO.StreamReader(textBox1

我一直在使用Array.Sort()对字符串数组进行排序,但出于某种原因,它保留了数组的第一个元素,并且输出不按顺序进行

    private void quicksort1_Click(object sender, EventArgs e)
    {


        String[] parts = new String[1000];

        //System.IO.StreamReader file = new System.IO.StreamReader(textBox1.Text);
        System.IO.StreamWriter output = new System.IO.StreamWriter("OUTPUT.txt");

        parts = File.ReadAllLines(textBox1.Text);
        foreach (string s in parts)
        {
                Array.Sort(parts);
                parts.Equals(s);
                output.WriteLine(s);
                counter++;

        }
        output.WriteLine("There were" + " "  + counter + " " + "lines read in.");

        output.Close();

我只是想知道是否有一种可能的解决方案,Array.Sort()可以对第一个元素和其他元素进行排序。

现在,您要对整个集合每行进行一次排序。相反,您可以在循环之前对行进行一次排序

在当前代码中,第一行显示为未排序,因为您在排序之前获取它:

foreach (string s in parts) // Getting s from the original array
{
   Array.Sort(parts);  //Sorting array
   // s is unchanged - at this point its still the first element from the original array
相反,先整理一下。试试这个:

private void quicksort1_Click(object sender, EventArgs e)
{
  using (var output = new System.IO.StreamWriter("OUTPUT.txt"))
  {
    string[] parts = File.ReadAllLines(textBox1.Text);
    Array.Sort(parts);
    foreach (string s in parts)
    {
        output.WriteLine(s);
    }

    output.WriteLine("There were {0} lines read in.", parts.Length);
  }
}


请注意,这里也不需要
计数器
变量,将代码切换为使用会稍微简化逻辑。

现在,您正在每行对整个集合进行一次排序。相反,您可以在循环之前对行进行一次排序

在当前代码中,第一行显示为未排序,因为您在排序之前获取它:

foreach (string s in parts) // Getting s from the original array
{
   Array.Sort(parts);  //Sorting array
   // s is unchanged - at this point its still the first element from the original array
相反,先整理一下。试试这个:

private void quicksort1_Click(object sender, EventArgs e)
{
  using (var output = new System.IO.StreamWriter("OUTPUT.txt"))
  {
    string[] parts = File.ReadAllLines(textBox1.Text);
    Array.Sort(parts);
    foreach (string s in parts)
    {
        output.WriteLine(s);
    }

    output.WriteLine("There were {0} lines read in.", parts.Length);
  }
}


请注意,这里也不需要
计数器
变量,将代码切换为使用会稍微简化逻辑。

这需要在循环之外(即循环之前):
数组.Sort(部件)


当您完成排序时,您已经在访问第一个元素。第一个元素在数组中被排序,您刚刚在枚举中的前一个位置访问了它。

这需要在循环之外(在循环之前):
Array.Sort(parts)



当您完成排序时,您已经在访问第一个元素。第一个元素在数组中被排序,您刚刚访问了它在枚举中的上一个位置。

您正在使用line
output.WriteLine输出第一行。
。问题是,在列表排序之前,会从列表中检索到
s

您正在使用行
output.WriteLine
输出第一行。问题是在列表排序之前,会从列表中检索到
s

为什么每次迭代都要对数组进行排序?为什么您认为它没有对第一个元素进行排序?我认为@Vipar是有意义的。当
foreach
循环引用
parts
对象时,对其进行排序可能会产生一些意外的副作用。您是否尝试过移动
数组.Sort(部件)statement to?问题是@Stock在排序之前将值取出,因此第一次打印是未排序数组中的值,但之后,它总是在排序后从数组中取出值(但它做了许多其他不应该做的事情).为什么每次迭代都要对数组进行排序?为什么你认为它没有对第一个元素进行排序?我认为@Vipar是有意义的。当
foreach
循环引用
parts
对象时,对其进行排序可能会产生一些意外的副作用。您是否尝试过移动
数组.Sort(部件)statement to?问题是@Stock在排序之前将值取出,因此第一次打印是未排序数组中的值,但之后,它总是在排序后从数组中取出值(但它做了许多其他不应该做的事情)现在我试着用整数来做这个,但是输出会像“1,10,11,12,2,3,4”那样,我怎样才能让它对值进行排序?抱歉,我对C#和编程相对较新。@Stock预先将其转换为整数。LINQ可以很好地实现这一点,即:
var partNumbers=File.ReadAllLines(textBox1.Text)。选择(line=>Convert.ToInt32(line)).OrderBy(i=>i)将返回已分类的数字。对于如何将其输出到文件,我仍然有点困惑,很抱歉打扰您。@Stock:
file.writeAllines(“output.txt”,partNumbers.Select(i=>i.ToString())@Stock如果有一行不是数字(并且无法解析为int),则上面的代码将给出该值。这包括空行(您必须单独处理它们),现在我尝试用整数来处理,但输出类似于“1,10,11,12,2,3,4”,我如何让它对值进行排序?抱歉,我对C#和编程相对较新。@Stock预先将其转换为整数。LINQ可以很好地实现这一点,即:
var partNumbers=File.ReadAllLines(textBox1.Text)。选择(line=>Convert.ToInt32(line)).OrderBy(i=>i)将返回已分类的数字。对于如何将其输出到文件,我仍然有点困惑,很抱歉打扰您。@Stock:
file.writeAllines(“output.txt”,partNumbers.Select(i=>i.ToString())@Stock如果有一行不是数字(并且无法解析为int),则上面的代码将给出该值。包括空行(您必须单独处理)