2015-03-31 2 views
-4

Нам был предоставлен текстовый файл, который случайным образом генерирует ~ 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? Что мне нужно сделать, чтобы отсортировать эти цифры?

+3

«я получаю кучу различных ошибок.» Какие ошибки? Похоже, вам нужно подумать о нескольких вещах: 1) преобразование каждой строки в число; 2) сохранение этих чисел (я бы использовал «Список », а не массив); 3) сортировка. Нужно ли вам самостоятельно выполнять этот вид? Какой из этих шагов вызывает проблему? Задайте один вопрос о конкретной проблеме, с которой вы столкнулись. –

+0

Хорошо первый вопрос. Должен ли я брать строку и преобразовывать ее в int32? – secretlygayfrog

+0

Ну, это, наверное, самый простой подход, да. Посмотрите на 'int.Parse'. –

ответ

2

Я не знаю, какие ошибки вы получаете, но если вам нужно просто прочитать номера из файла (предполагается, что одно целое число в каждой строке), это может быть сделано следующим образом:

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

Если вы уже используете LINQ, почему бы не использовать 'OrderBy'? Кроме того, вы можете использовать '.Select (int.Parse)', а не лямбда-выражение. Но я подозреваю, что все это слишком продвинуто для OP, который, вероятно, новичок в языке. –

+0

Путь к advanvced – secretlygayfrog

+0

@nikis Это идентично моему решению - вы избили меня до него. :) Но я согласен с Джоном Скитом; использование OrderBy имеет смысл. – Ulric

0

размещения информации о ваших ошибках будет полезно при решении этих конкретных проблем.

Однако для массива особенно если вы знаете, что это всегда будет 500 номеров, вы можете просто объявить массив целых чисел и использовать его следующим образом:

int[] numberArray = new int[500]; 
numberArray[i] = int.Parse(line); //Assuming you can rely on them always being numbers 

Сказав это, я думаю, что нормальный список и Linq может быть предпочтительным способом выполнения некоторых из этого. Хотя сейчас я сохраню этот пример.

Я попробую добавить дополнительную информацию, если вы можете предоставить более подробную информацию.

Edit: Добавление Списка информация:

В самом начале вашей программы вы будете нуждаться в этом:

using System.Collections.Generic; 

Это говорит компилятор, который вы хотите использовать код из этой сборки, и это где Класс списка находится.

Следующая просто объявить список:

List<int> numberList = new List<int>(); 

Тогда как вы проходным файл вы можете добавить целые числа в списке:

numberList.Add(int.Parse(line)); 

И когда вы будете готовы, чтобы отсортировать их, вы необходимо добавить это в начало вашей программы:

using System.Data.Linq; 

А затем в вашем коде вы можете создавать т.е новый список, который имеет свои отсортированные номера:

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

Или если вы просто хотите, чтобы перебрать и распечатать их:

foreach(int number in numberList.OrderBy(p => p)) { 
    Console.WriteLine(number); 
} 
+0

Хорошо, используя список было бы проще? Никогда раньше ему не приходилось использовать его раньше. Могу ли я использовать средство чтения потока для перевода строки в список? – secretlygayfrog

+0

@secretlygayfrog: вы не поместили бы строку в список - вы проанализировали каждую строку и добавили 'int' в' List '. –

+0

Да. В вашем случае что-то вроде List numberList = new List (); объявит ваш список, а затем numberList.Add (int.Parse (строка)); будет анализировать число в int и сохранять его в списке. Обратите внимание, что вам нужно будет включить использование для использования System.Collections.Generic; чтобы иметь возможность ссылаться на пространство имен, в котором находится List <>. Или, если вы находитесь в Visual Studio (особенно в последних выпусках), вы должны иметь возможность объявить список и щелкнуть правой кнопкой мыши по типу List и выбрать Resolve-> using System. Collections.Generic; – CShannon

Смежные вопросы