Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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#_Arrays_Quicksort - Fatal编程技术网

C# 我有一个文本文件,每个数字都需要放入一个数组中

C# 我有一个文本文件,每个数字都需要放入一个数组中,c#,arrays,quicksort,C#,Arrays,Quicksort,我们得到了一个随机生成约500个数字的文本文件。我已经读取了文件,但是现在我想把它存储到一个数组中,这样我就可以从最小到最大排序。每次我尝试设置它时,都会出现一系列不同的错误。 这是我到目前为止所拥有的 static void Main(string[] args) { try { //opens and closes the stream reader using (StreamReader sr = n

我们得到了一个随机生成约500个数字的文本文件。我已经读取了文件,但是现在我想把它存储到一个数组中,这样我就可以从最小到最大排序。每次我尝试设置它时,都会出现一系列不同的错误。
这是我到目前为止所拥有的

static void Main(string[] args)
    {
        try
        {

            //opens and closes the stream reader
            using (StreamReader sr = new StreamReader("sort.txt"))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);

                }
            }
        }

        catch (Exception e)
        {
            //lets user know that the file could not be read
            Console.WriteLine("Sorry that file could not be read");
            Console.WriteLine(e.Message);
        }

我需要在try语句中设置数组吗?我需要做什么来对这些数字进行排序?

我不知道您会遇到什么错误,但如果您只需要从文件中读取数字(假设每行一个整数),可以通过以下方式完成:

var myNumbers = File.ReadAllLines("myFile.txt")
                        .Select(x => int.Parse(x))
                        .OrderBy(x => x)
                        .ToList();

发布有关错误的信息将有助于解决这些特定问题

但是,对于数组,特别是如果您知道它总是500个数字,您可以简单地声明一个整数数组,并按如下方式使用它:

int[] numberArray = new int[500];
numberArray[i] = int.Parse(line); //Assuming you can rely on them always being numbers
说到这里,我认为一个普通的列表和Linq可能是实现这一点的首选方式。虽然我现在将保留该示例

我会尝试添加更多的信息,如果你能提供更多的细节

编辑:添加列表信息:

在程序的最顶层,您需要:

using System.Collections.Generic;
它告诉编译器您希望使用来自该程序集的代码,并且它是List类所在的位置

接下来只需声明您的列表:

List<int> numberList = new List<int>();
当您准备好对它们进行排序时,您需要将其添加到程序的顶部:

using System.Data.Linq;
然后在代码中,您可以创建一个新列表,其中包含您的排序编号:

List<int> sortedListOfNumbers = numberList.OrderBy(p => p).ToList();

“我犯了很多不同的错误。”什么错误?看起来您需要考虑几件事:1)将每一行转换为一个数字;2) 存储这些数字(我会使用
列表
而不是数组);3) 分类。您必须自己实施排序吗?以下哪一个步骤会导致问题?请问一个关于你遇到问题的具体部分的问题。好的,第一个问题。我必须把行转换成int32吗?这可能是最简单的方法,是的。查看
int.Parse
。如果您已经在使用LINQ,为什么不使用
OrderBy
?此外,您还可以使用
.Select(int.Parse)
而不是lambda表达式。但我怀疑,对于OP来说,这一切都有点太高级了,因为OP可能是这门语言的新手。@nikis,这和我的解决方案是一样的-你比我强了。:)但我同意乔恩·斯基特的观点;使用OrderBy是有意义的。@JonSkeet@Ulric ok,改为
OrderBy
。方法组肯定有点太高级了。好吧,使用列表会更容易些?以前从未真正使用过它。我可以使用流读取器将行放入列表吗?@secretlygayfrog:您不会将行放入列表-您需要解析每一行并将
int
添加到
列表中。是的。在您的例子中,类似于List numberList=new List();将声明您的列表,然后是numberList.Add(int.Parse(line));将数字解析为整数并保存在列表中。请注意,您需要包括一个using for use System.Collections.Generic;以便能够引用列表所在的命名空间。或者,如果您在Visual Studio(特别是最新版本)中,您应该能够声明列表并右键单击列表类型,然后选择Resolve->using System.Collections.Generic;OK-更新了答案,包括上面的一些信息,以及关于如何使用Linq对它们进行排序的附加信息。所有这些基本上都是Nikis上面的答案告诉你的,我只是把它分成几部分,这样你就可以跟踪每一步发生的事情。
List<int> sortedListOfNumbers = numberList.OrderBy(p => p).ToList();
foreach( int number in numberList.OrderBy(p => p)) {
    Console.WriteLine(number);
}