files = Directory.GetFiles(mainpath, "animated*.gif", SearchOption.AllDirectories);
Array.Sort(files);
foreach (string str in files)
{
Console.Write(str + " ");
}
文件是字符串[] 文件在每个索引中包含51个索引。 例如,在索引0中,我看到:
c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 102 Height = 102\animated102x102.gif
在索引1中,我看到:
"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 112 Height = 112\animated112x112.gif"
索引2:
"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 12 Height = 12\animated12x12.gif"
它应该从索引0开始:
"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 502 Height = 502\animated502x502.gif"
索引1:
"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 492 Height = 492\animated492x492.gif"
最后一个索引是:
"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 2 Height = 2\animated2x2.gif"
那应该是订单。但现在它一团糟。 所以我尝试使用Array.Sort,但它没有用。
我也有这个方法,我之前用于排序:
private void Walkdirectoryfulldepth(string dirPath)
{
data = new List<string>();
DirectoryInfo dirInfo = new DirectoryInfo(dirPath);
var sorted = dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly).ToList();
DirectoryInfo[] subDirs = dirInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly);
string[] strDir = new string[subDirs.Count()];
int i = 0;
foreach (var item in subDirs)
{
strDir[i] = item.FullName;
i++;
}
NumericComparer nc = new NumericComparer();
Array.Sort(strDir, nc);
foreach (var item in strDir)
{
data.Add(Path.GetFileName(item));
}
}
但是这个方法得到字符串而不是字符串[] 我想最终变量文件将保持为string []但已排序。
我如何制作另一种方法,如Walkdirectoryfulldepth,但这次它会接受字符串[]?
答案 0 :(得分:1)
您可以尝试以下
string[] strarr = new string[] { @"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 502 Height = 502\animated502x502.gif", @"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 492 Height = 492\animated492x492.gif", @"c:\temp\newimages\Changed_Resolution_By_10\SecondProcess_-Width = 2 Height = 2\animated2x2.gif" };
IEnumerable<string> strTest = strarr.OrderByDescending(p => p.Substring(p.IndexOf("x"), p.Length - p.IndexOf(".")));
答案 1 :(得分:0)
如果您想要做更多事情,那么只需对整个string
进行排序(调用Reverse()
是最佳选择),您可以使用以下内容:
IOrderedEnumerable<string> asc = files.OrderBy(x => x);
IOrderedEnumerable<string> desc = files.OrderByDescending(x => x);
在lambda表达式中,您可以按照自己的方式创建排序规则,例如从文件名中删除一些文本并对其余部分进行排序。