排序数组升序?

时间:2013-12-10 10:17:09

标签: c# sorting

我有一个电影列表,我已经使用streamreader输入到控制台,我想对这些进行升序排序,但我似乎无法弄清楚如何,有人可以帮忙吗?感谢

到目前为止

代码:

//Program that has popular film names on an external datafile, which then reads the files and
//displays them in the console window

//Declare variables
int iOneWordTitle;

//Declare array
const int iFilm = 7;
string[] sOneWordTitle = new string[iFilm];

//Add title to console
Console.WriteLine("List of one word film titles");
Console.WriteLine();

//Read the film names from the datafile
using (StreamReader sr = new StreamReader("filmnames.txt"))
{
    for (iOneWordTitle = 0; iOneWordTitle < iFilm; iOneWordTitle++)
    {
        sOneWordTitle[iOneWordTitle] = (sr.ReadLine());
        Console.WriteLine(sOneWordTitle[iOneWordTitle]);
    }

    Array.Sort(sOneWordTitle); //Sort ascending
}

//Prevent program from closing
Console.WriteLine("Press any key to close");
Console.ReadKey();

3 个答案:

答案 0 :(得分:4)

您正在正确排序。 问题是您在阅读和排序之前显示记录。 您需要一个额外的循环来显示Array.Sort

之后的元素

答案 1 :(得分:2)

你可以在'一行'中完成所有工作:

using (StreamReader sr = new StreamReader("filmnames.txt"))
{
    Console.WriteLine(string.Join(Environment.NewLine, sr.ReadToEnd().Split(new []{'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries).OrderBy(p => p)));
}

这是做什么的?

  1. 最嵌套的方法是调用ReadToEnd。这会将entrie文件读取为单个字符串。
  2. string.Split的调用将字符串拆分为一个字符串数组,其中出现新行。
  3. 对LINQ的OrderBy方法的调用使用每个文件名的原始string进行实际排序
  4. string.Join使用换行符作为分隔符将名称重新组合成一个string(这样您就可以自己制作每部电影)
  5. Console.WriteLine做你期望的事情;)
  6. 对于新人来说有点复杂™但是有一些有趣的事情正在发生。 string.Join值得了解。

    这里没有使用声明,只是为了咯咯笑。

    Console.WriteLine(string.Join(Environment.NewLine, File.ReadAllLines("filmnames.txt").OrderBy(p => p)));
    

答案 2 :(得分:0)

我要继续猜测C#不是你的母语:)

实现这一目标的通常(更漂亮)方式如下:

List<string> lines = new List<string>();

using (var sr = new StreamReader("filmnames.txt"))
{
  string line;

  while ((line = sr.ReadLine()) != null)
  {
    lines.Add(line);
  }
}

lines.Sort();

// Or...

lines = lines.OrderBy(i => i).ToList();

// And write the output
foreach (var line in lines)
    Console.WriteLine(line);