我有一些带有大量组合数字的文件需要排序。我尝试使用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] + " ";
}
注意:这是用于个人学习,而不是家庭作业或类似的东西。
答案 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;
}