Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 排序数组升序?_C#_Sorting - Fatal编程技术网

C# 排序数组升序?

C# 排序数组升序?,c#,sorting,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;

我有一个电影列表,我已经使用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();
//在外部数据文件上有流行电影名称的程序,然后读取文件并
//在控制台窗口中显示它们
//声明变量
国际职称;
//声明数组
常数int iFilm=7;
字符串[]sOneWordTitle=新字符串[iFilm];
//向控制台添加标题
Console.WriteLine(“单字电影标题列表”);
Console.WriteLine();
//从数据文件中读取电影名称
使用(StreamReader sr=newstreamreader(“filmnames.txt”))
{
对于(iOneWordTitle=0;iOneWordTitle
您正在正确排序。 问题是,您在读取记录时和排序前显示记录。
您需要一个额外的循环来显示数组后的元素。排序

您正在正确排序它。 问题是,您在读取记录时和排序前显示记录。
您需要一个额外的循环来显示数组之后的元素。排序可以在“一行”中完成:

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

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

    这里没有using语句,只是为了好玩

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

    您可以在“一行”中完成所有操作:

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

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

    这里没有using语句,只是为了好玩

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

    我会继续猜测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);
    
    列表行=新列表();
    使用(var sr=newstreamreader(“filmnames.txt”))
    {
    弦线;
    而((line=sr.ReadLine())!=null)
    {
    行。添加(行);
    }
    }
    line.Sort();
    //或者。。。
    lines=lines.OrderBy(i=>i.ToList();
    //并写入输出
    foreach(行中的var行)
    控制台写入线(行);
    
    我继续猜测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);
    
    列表行=新列表();
    使用(var sr=newstreamreader(“filmnames.txt”))
    {
    弦线;
    而((line=sr.ReadLine())!=null)
    {
    行。添加(行);
    }
    }
    line.Sort();
    //或者。。。
    lines=lines.OrderBy(i=>i.ToList();
    //并写入输出
    foreach(行中的var行)
    控制台写入线(行);
    
    到目前为止,我通常要求提供代码,但在这种情况下,我必须说,几乎所有代码都与问题无关。您能更具体一点吗?到底是什么问题?另一方面,您使用的是匈牙利符号的变体,它在变量的类型前加上前缀。很多人(包括我在内)认为这种做法很糟糕,因为它只会增加噪音。编译器不会让你混合不兼容的类型。你有什么问题?Array.Sort(sOneWordTitle);应该已经对数组进行了正确的排序。您可以简化为
    var sOneWordTitle=File.ReadAllLines(“filmnames.txt”);Array.Sort(sOneWordTitle)。这将读取所有行,而不仅仅是七行。如果只需要七个,可以使用
    var sOneWordTitle=File.ReadLines(“filmnames.txt”).Take(iFilm.ToList();sOneWordTitle.Sort()。在C#中,在顶部声明所有局部变量不是一个好的做法。例如,
    For
    循环的循环变量应该在
    For
    循环本身的附近/中声明。到目前为止,我通常要求提供代码,但在这种特殊情况下,我必须说几乎整个代码都与问题无关。您能更具体一些吗?到底是什么问题?另一方面,您使用的是匈牙利符号的变体,它在变量的类型前加上前缀。很多人(包括我在内)认为这种做法很糟糕,因为它只会增加噪音。编译器不会让你混合不兼容的类型。你有什么问题?Array.Sort(sOneWordTitle);应该已经对数组进行了正确的排序。您可以简化为
    var sOneWordTitle=File.ReadAllLines(“filmnames.txt”);Array.Sort(sOneWordTitle)。这将读取所有行,而不仅仅是七行。如果只需要七个,可以使用
    var sOneWordTitle=File.ReadLines(“filmnames.txt”).Take(iFilm.ToList();sOneWordTitle.Sort()。这不是一个好的公关