-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(新しい ExtComparer ());

于 2013-08-09T17:38:18.873 に答える