-1

我有一个目录,其中包含具有这些文件名的文件:

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

但我需要按升序排序的文件扩展名处理文件,所以这是我需要的项目索引:

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# 中对列表进行排序?

4

3 回答 3

6
var sorted = FileList.OrderBy(f => f.Extension);
于 2013-08-09T17:34:40.890 回答
4

如果这是一个,你可以使用:List(OfFileInfo)

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

请注意,如果您在构建FileInfo列表时可以执行此排序,则 LINQ 解决方案可能会更好,即:

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

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

于 2013-08-09T17:34:46.873 回答
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());

于 2013-08-09T17:38:18.873 回答