我有一个文件列表说 prg_3.txt,prg_2.txt,prg_1.txt。
我需要遍历文件并按顺序1,2,3合并文件。
我使用的查询如下:
var Groups = shortfilenames.GroupBy(s => s.Substring(0, s.IndexOf('_'))).ToList();
上面的查询会创建一个组名prg,它将有3个文件。
现在,我需要按照1,2,3的顺序对它们进行排序,即从它们的文件名开始。
在这里,我得到分组结果,但我不知道如何订购每组中的元素
请帮助..我知道任何问题..
已编辑:
它会不够好?
var userGroups = shortfilenames.GroupBy(s => s.Substring(0, s.IndexOf('_'))).Select(g=>g.OrderBy(x=>x.Substring(x.IndexOf('_',x.Length-x.IndexOf('_')))));
答案 0 :(得分:1)
这应该有效,但可能不会那么有效:
shortfilenames
.GroupBy(s => s.Substring(0, s.IndexOf('_')))
.Select(
g => g.OrderBy(x => int.Parse(new String(x.Where(char.IsDigit).ToArray()))));
如果您的文件包含其他数字,这将不起作用,这是另一种解决方法,根据您的评论,这应该与您指定的格式一起使用:
shortfilenames
.GroupBy(s => s.Substring(0, s.IndexOf('_')))
.Select(g => g.OrderBy(
x =>
{
var index = x.IndexOf('_');
return int.Parse(x.Substring(index + 1, x.LastIndexOf('.') - index));
}));
答案 1 :(得分:0)
由于这些名称有点匹配,只需使用OrderBy
并给它命名是什么问题?
var v = new string[] {"prg_3.txt","prg_2.txt", "prg_1.txt"};
var sorted = v.OrderBy(name => name);
你得到:
prg_1.txt
prg_2.txt
prg_3.txt
答案 2 :(得分:-1)
如果你想按文件名对内部分组进行排序,这应该可以解决问题:
shortfilenames.GroupBy(s => s.Substring(0, s.IndexOf('_'))).Select(g => g.OrderBy(e => e)).ToList();