我有一个电影列表,我已经使用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();
答案 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)));
}
这是做什么的?
ReadToEnd
。这会将entrie文件读取为单个字符串。string.Split
的调用将字符串拆分为一个字符串数组,其中出现新行。OrderBy
方法的调用使用每个文件名的原始string
进行实际排序string.Join
使用换行符作为分隔符将名称重新组合成一个string
(这样您就可以自己制作每部电影)Console.WriteLine
做你期望的事情;)对于新人来说有点复杂™但是有一些有趣的事情正在发生。 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);