你能帮我解决这个问题: 我想在C#中构建一个方法,它将通过以下规则对大量文件进行排序 每行包含字符串,每行中的最后一个字符是int。 我想通过这个最后一个字符int来命令文件中的行。
由于
答案 0 :(得分:4)
要按最后一个字符进行升序,可以解释为整数:
var orderedLines= File.ReadAllLines(@"test.txt")
.OrderBy(line => Convert.ToInt32(line[line.Length-1]))
.ToList();
修改强>
在评论中澄清 - 空格字符后面的整数,可以是多个数字:
var orderedLines= File.ReadAllLines(@"test.txt")
.OrderBy(line => Convert.ToInt32(line.Substring(line.LastIndexOf(" ")+1,
line.Length - line.LastIndexOf(" ")-1)))
.ToList();
答案 1 :(得分:2)
你可以这样做,其中filename
是你文件的名称:
// Replace with the actual name of your file
string fileName = "MyFile.txt";
// Read the contents of the file into memory
string[] lines = File.ReadAllLines(fileName);
// Sort the contents of the file based on the number after the last space in each line
var orderedLines = lines.OrderBy(x => Int32.Parse(x.Substring(x.LastIndexOf(' '))));
// Write the lines back to the file
File.WriteAllText(fileName, string.Join(Environment.NewLine, orderedLines));
这只是一个粗略的轮廓;希望它有用。
答案 2 :(得分:2)
File.WriteAllLines(
pathToWriteTo,
File.ReadLines(pathToReadFrom)
.OrderBy(s => Convert.ToInt32(s.Split(' ').Last()))
);
如果文件很大,这可能无效,因为这种有效排序方法需要将整个文件读入内存。
答案 3 :(得分:0)
假设您需要多个单位数整数,并且您在文件名和其余部分之间有一个分隔符(我们称之为'splitChar'),它可以是任何字符:
from string str in File.ReadAllLines(fileName)
let split = str.Split(splitChar)
orderby Int32.Parse(split[split.Count()-1])
select str
将按照最后一个分组的整数值(由分割字符分隔)的顺序为您提供一系列字符串。
答案 4 :(得分:0)
也许这些链接中的一个可以通过自然方式对其进行排序来帮助您: