从文本文件或多行/ Richtexbox逐行从最小到更大编号排序

时间:2019-01-30 15:56:17

标签: c# sorting

我有一些带有大量组合数字的文件需要排序。我尝试使用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] + " ";
            }

来源Input an array into a textbox and display sorted array using Insertion sorting

注意:这是用于个人学习,而不是家庭作业或类似的东西。

1 个答案:

答案 0 :(得分:1)

如果您只需要对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;
}