C# 使用Array.Sort()对元素进行排序不排序第一个元素
我一直在使用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
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)代码>
当您完成排序时,您已经在访问第一个元素。第一个元素在数组中被排序,您刚刚访问了它在枚举中的上一个位置。您正在使用lineoutput.WriteLine输出第一行。
。问题是,在列表排序之前,会从列表中检索到s
。您正在使用行output.WriteLine
输出第一行。问题是在列表排序之前,会从列表中检索到s
。为什么每次迭代都要对数组进行排序?为什么您认为它没有对第一个元素进行排序?我认为@Vipar是有意义的。当foreach
循环引用parts
对象时,对其进行排序可能会产生一些意外的副作用。您是否尝试过移动数组.Sort(部件)循环开始前的code>statement to?问题是@Stock在排序之前将值取出,因此第一次打印是未排序数组中的值,但之后,它总是在排序后从数组中取出值(但它做了许多其他不应该做的事情).为什么每次迭代都要对数组进行排序?为什么你认为它没有对第一个元素进行排序?我认为@Vipar是有意义的。当foreach
循环引用parts
对象时,对其进行排序可能会产生一些意外的副作用。您是否尝试过移动数组.Sort(部件)循环开始前的code>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),则上面的代码将给出该值。包括空行(您必须单独处理)