2015-04-02 5 views
0

У меня есть текстовый файл, который читается, а затем сохраняется в string[], который затем преобразовывается в int[], тогда мой пузырьковой сортировки должен сортировать его, но это не потому, что значения из текстовых файлов - десятичные числа. Поэтому мой вопрос заключается в том, как преобразовать string[] или int[] в то, что может принимать десятичные значения, например double[], если есть такая вещь. Благодарю.Преобразование строки [] в double []

Код:

string[] sh1OpenData = File.ReadAllLines("SH1_Open.txt"); 

...

else if(input2.ToLower() == "open") //---- 
{ 
    int[] intSh1OpenData = new int[sh1OpenData.Length]; 

    for (int x = 0; x < sh1OpenData.Length; x++) 
    { 
     intSh1OpenData[x] = Convert.ToInt32(sh1OpenData[x]); 
    } 

    Console.WriteLine("\n"); 
    Console.WriteLine("Unsorted"); 

    for (int i = 0; i < intSh1OpenData.Length; i++) 
    { 
     Console.Write(intSh1OpenData[i] + " "); 
     Console.WriteLine(" "); 
    } 

    int temp = 0; 

    for (int write = 0; write < intSh1OpenData.Length; write++) 
    { 
     for (int sort = 0; sort < intSh1OpenData.Length - 1; sort++) 
     { 
      if (intSh1OpenData[sort] > intSh1OpenData[sort + 1]) 
      { 
       temp = intSh1OpenData[sort + 1]; 
       intSh1OpenData[sort + 1] = intSh1OpenData[sort]; 
       intSh1OpenData[sort] = temp; 
      } 
     } 
    } 
     Console.WriteLine("\n\n\nSORTED"); 

    for (int i = 0; i < intSh1OpenData.Length; i++) 
     Console.Write(intSh1OpenData[i] + "\n"); 
} 
+0

Вы используете bubblesort по определенной причине? Или вы просто пытаетесь отсортировать массив, и все, что вы знаете, - это пузырьки? – DLeh

+0

Convert.ToDouble()? – Guillaume

+0

'bubblesort'ing? Как насчет красивого [Bogo Sort] (http://en.wikipedia.org/wiki/Bogosort)? – asawyer

ответ

0

Вы не должны использовать Int делать сравнения на строку. Используйте String.Compare (возврат 0, если он равен -1, если меньше или 1, если больше) или List.Sort() для сортировки строкового массива

+0

Ну, мой текстовый файл содержит только десятичные значения, поэтому их следует читать как double или floats, верно? Кроме того, я тестирую свои навыки написания алгоритмов. –

+0

Вы пытались использовать Double.Parse() или Float.Parse() для преобразования строки в ее представляющий тип? – maximdumont

+0

как я могу это использовать? Извините, я новичок в программировании. –

0

Только изменения, которые вам нужно внести, перечислены ниже:

double[] intSh1OpenData = new double[sh1OpenData.Length]; // double[] instead of int[] 

for (int x = 0; x < sh1OpenData.Length; x++) 
{ 
    intSh1OpenData[x] = Convert.ToDouble(sh1OpenData[x]); // Convert to Double 
} 

также изменить декларацию вашей temp переменной double temp;

что-то, что вы могли читать через так как вы упомянули, что вы новичок в программировании:
C# Sort Arrays and Lists Examples
MSDN: List.Sort Method

0

Довольно просто с помощью LINQ

var asDouble = sh1OpenData.Select(x => Double.Parse(x)).OrderBy(x => x).ToArray(); 

Это даст вам отсортированный (по возрастанию) порядок массив Double.

Примечание: предполагается, что все sh1OpenData могут быть проанализированы как Double и будут выдавать исключение, если нет.

+0

Прохладный. Чтобы добавить к этому, возможно, что-то можно сделать с PredicateBuilder, чтобы проверить, можно ли его проанализировать? – jbailie1991

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