Сортировка от наименьшего к большему количеству строк построчно из текстового файла или многострочного / Richtexbox - PullRequest
0 голосов
/ 30 января 2019

У меня есть несколько файлов с большим количеством комбинированных чисел, которые нужно отсортировать.Я пытался использовать Excel, однако, он не работает должным образом, так как он не сортирует некоторые значения (очень странно).Итак, я хочу сделать это с помощью C #.Я нашел код ниже с другого сайта и работает по одной строке за раз (не многострочное текстовое поле).Как его можно изменить, чтобы использовать для нескольких строк чисел, например, следующих за ними, и сортировать слева направо (от наименьшего к наибольшему) или справа налево?Или, если есть какое-либо другое лучшее решение или вариант.Он может либо читать непосредственно из текстового файла, либо из текстового поля, а затем отображать результаты в другом текстовом поле или сохранять в новом файле.

Числа * Пример списка:

(1) 19 11 7 12 18   
(2) 25 18 15 10 16  
(3) 12 23 1 18 11   
(4) 4 15 2 3 26 
(5) 14 3 10 8 17    
(6) 8 1 26 14 11    
(7) 16 24 4 6 26    
(8) 14 23 13 21 15  
(9) 21 14 12 19 22  
(10) 1 23 12 6 19   
(11) 11 14 1 25 3

* Отменачисла в скобках

Код:

 int i, j, temp;
            List<string> array=new List<string>();
            List<int> arrayInt = new List<int>();

            array.AddRange(textBox1.Text.Split(' ').Select(txt => txt.Trim()).ToArray());
            arrayInt = array.Select(s => int.Parse(s)).ToList(); //Converting string array to int array

            for (i = 1; i < array.Count(); i++)
            {
                j = i;

                while (j > 0 && arrayInt[j - 1] > arrayInt[j])
                {
                    temp = arrayInt[j];
                    arrayInt[j] = arrayInt[j - 1];
                    arrayInt[j - 1] = temp;
                    j--;
                }

            }

            for (i = 0; i < array.Count(); i++)
            {                
                textBox2.Text += arrayInt[i] + " ";
            }

Источник Введите массив в текстовое поле и отобразите отсортированный массив, используя сортировку вставками

Примечание: этодля личного обучения, а не для домашней работы или чего-то в этом роде.

1 Ответ

0 голосов
/ 30 января 2019

Если вам нужно только отсортировать значения типа int и вы не уверены, какие символы будут вводиться в текстовое поле между значениями, я бы сказал что-то вроде этого:

// Split the text box into lines
var lines = text.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

var finalText = string.Empty;
foreach (var line in lines)
{
    var formattedLine = line;

    // Replace all characters that are not a digit by a space
    var charsToReplace = line.ToCharArray().Where(x => !char.IsDigit(x)).Distinct();
    foreach (var charToReplace in charsToReplace)
    {
        formattedLine = line.Replace(charToReplace, ' ');
    }

    // Replace multiple spaces by single space
    formattedLine = new Regex("[ ]{2,}").Replace(formattedLine, " ").Trim();

    // Split the line at every space, and cast the result to an int
    var intEnumerable = formattedLine.Split(' ').Select(x => int.Parse(x.Trim()));

    // Order the list ascending or descending
    //var orderedListDescending = intEnumerable.OrderByDescending(x => x);
    var orderedList = intEnumerable.OrderBy(x => x);

    // Concatenate each ordered line in a string variable, separated by Environment.NewLine
    finalText += string.Join(" ", orderedList) + Environment.NewLine;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...