按文件扩展名对List(Of IO.FileInfo)进行排序

时间:2013-08-09 17:30:49

标签: c# .net vb.net sorting io

我有一个包含这些文件名的文件的目录:

12.mp4
34.wmv
56.ogm
78.avi
90.m4v

在我的应用程序中,我将目录的文件列入List(Of File.Info),该列表被默认编入索引:

FileList.Item(0).Name = 12.mp4
FileList.Item(1).Name = 34.wmv
FileList.Item(2).Name = 56.ogm
FileList.Item(3).Name = 78.avi
FileList.Item(4).Name = 90.m4v

但是我需要通过以升序模式排序的文件扩展名来处理文件,所以这是我需要的Item-indexation:

FileList.Item(0).Name = 78.avi
FileList.Item(1).Name = 90.m4v
FileList.Item(2).Name = 12.mp4
FileList.Item(3).Name = 56.ogm
FileList.Item(4).Name = 34.wmv

如何在VB.NET或C#中对List进行排序?

3 个答案:

答案 0 :(得分:7)

var sorted = FileList.OrderBy(f => f.Extension);

答案 1 :(得分:4)

如果这是List(Of FileInfo ),您可以使用:

FileList.Sort(Function(fi1,fi2) return fi1.Extension.CompareTo(fi2.Extension))

请注意,如果您在构建FileInfo列表时可以执行此类操作,那么LINQ解决方案可能会更好,例如:

Dim FileList = theDirectoryInfo.GetFiles().OrderBy(Function(f) f.Extension).ToList()

但是,如果列表已经构建,那么就地排序可能比使用LINQ重建列表然后重新分配更清晰。

答案 2 :(得分:1)

试试这个:

public class ExtComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        //return Path.GetExtension(x).CompareTo(Path.GetExtension(y)); or
        return System.String.Compare(Path.GetExtension(x), Path.GetExtension(y), System.StringComparison.Ordinal);
    }
}

使用:     MyList.Sort(new ExtComparer());