我如何排序数组:string []?

时间:2014-05-16 13:59:48

标签: c# arrays winforms sorting

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,但这次它会接受字符串[]?

2 个答案:

答案 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表达式中,您可以按照自己的方式创建排序规则,例如从文件名中删除一些文本并对其余部分进行排序。