在列表条目名称中按日期对列表框进行排序

在列表条目名称中按日期对列表框进行排序

本文介绍了C#在列表条目名称中按日期对列表框进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个由DirectoryInfo填充的ListBox:

I have a ListBox, filled by DirectoryInfo:

FileInfo[] files = (new DirectoryInfo(Program.pathtofiles())).GetFiles();
            for (int i = 0; i < (int)files.Length; i++)
            {
                FileInfo fileName = files[i];
                this.ListBox.Items.Add(fileName);
            }

一个项目看起来像:

所以我的问题是如何按日期末尾对列表框中的主题进行排序?我知道ListBox有一些排序功能,但对我不起作用.

So my Question is how to sort the Itmes in the ListBox by the Date at the end? I know there are some sort-functions for the ListBox but they don´t work for me.

推荐答案

因此,文件名包含三个标记,最后一个是日期,您可以使用以下LINQ方法:

So the file-name contains three tokens and the last is the date, you can use this LINQ approach:

var sortedPaths = Directory.EnumerateFiles(Program.pathtofiles())
    .Select(Path => new { Path, Name = Path.GetFileNameWithoutExtension(Path) })
    .Select(x => new { x.Path, Date = DateTime.Parse(x.Name.Split('_').Last()) })
    .OrderBy(x => x.Date)
    .Select(x => x.Path);

如果要重新排序列表项而不从文件系统中读取:

If you want to reorder the list-items without reading from file-system:

var sortedPaths = this.ListBox.Items.Cast<string>()
    .Select(Path => new { Path, Name = Path.GetFileNameWithoutExtension(Path) })
    .Select(x => new { x.Path, Date = DateTime.Parse(x.Name.Split('_').Last()) })
    .OrderBy(x => x.Date)
    .Select(x => x.Path);
this.ListBox.Items.AddRange(sortedPaths.ToArray());

如果您想最后一次约会,请先使用 OrderByDescending .

If you want last dates first use OrderByDescending.

这篇关于C#在列表条目名称中按日期对列表框进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-06 00:10