C# 排序数组升序?
我有一个电影列表,我已经使用streamreader输入到控制台中,我想对这些电影进行升序排序,但我似乎不知道怎么做,有人能帮忙吗?谢谢 迄今为止的代码: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;
//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
将字符串拆分为一个字符串数组,其中出现新行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
将字符串拆分为一个字符串数组,其中出现新行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()代码>。这不是一个好的公关