1

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() が最初の要素と他の要素をソートする場所に可能な解決策があるかどうか疑問に思っていました。

4

3 に答える 3

4

現在、セット全体を 1 行に 1 回ソートしています。代わりに、ループの前に一度だけ行を並べ替えることができます。

現在のコードでは、並べ替えの前にフェッチしているため、最初の行並べ替えられていないように見えます。

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);
  }

    }

ここでも変数は必要ないことに注意してください。ステートメントcounterを使用するようにコードを切り替えると、ロジックが少し単純化されます。using

于 2013-05-23T16:54:40.977 に答える
2

これは、ループの外側 (ループの前) にある必要があります。Array.Sort(parts);

ソートを完了するまでに、すでに最初の要素にアクセスしています。最初の要素は配列でソートされています。列挙の前の位置でアクセスしただけです。

于 2013-05-23T16:55:33.820 に答える
0

line を使用して最初の行を出力していますoutput.WriteLine(s)。問題はs、リストがソートされる前にリストから取得されることです。

于 2013-05-23T17:00:02.470 に答える