c# - 按字符串排序列表以查找较新版本 C#

标签 c# sorting directory version

我有一个包含多个目录的文件夹,这些目录以某个更新版本命名,例如 UPDATE_20080311_3.5.9。 我需要通过查看“3.5.9”来找到该列表的最新更新,我编写了一个代码来解析名称并将版本添加到列表中。 无论如何使用 List.Sort 对列表进行排序以获得最新版本的“编号”? 这是我到目前为止所做的代码,我不知道如何正确使用 .Sort() 方法以及是否可以这样做。 感谢您提供的任何帮助

public string NewerVersion(string Directoria)
    {
        List<string> Lista = new List<string>();
        DirectoryInfo dir = new DirectoryInfo(Directoria);
        DirectoryInfo[] dirs = dir.GetDirectories();
        foreach (DirectoryInfo Info in dirs)
        {
            string Dir = Info.Name.ToString();
            Lista.Add(Dir.Substring(Dir.LastIndexOf('_'), Dir.Length));

        }
        Lista.Sort()
        //Lista.ToArray();
    }

最佳答案

您可以使用 Version它实现了 IComparable,所以它支持排序。

例如这个 LINQ 查询:

Version version = null;
Version lastVersion = new DirectoryInfo(Directoria).EnumerateDirectories()
    .Where(d => d.Name.StartsWith("UPDATE_"))
    .Select(d => new {Directory = d, Token = d.Name.Split('_')})
    .Where(x => x.Token.Length == 3 && Version.TryParse(x.Token[2], out version))
    .Select(x => new {x.Directory, Date = x.Token[1], Version = version})
    .OrderByDescending(x => x.Version)
    .Select(x => x.Version)
    .FirstOrDefault();
string latestVersion = lastVersion.ToString(); // if you want it as string

After I find the newer version I need to be able to return the name of the directory

然后使用这个查询:

var lastVersion = new DirectoryInfo(Directoria).EnumerateDirectories()
    .Where(d => d.Name.StartsWith("UPDATE_"))
    .Select(d => new {Directory = d, Token = d.Name.Split('_')})
    .Where(x => x.Token.Length == 3 && Version.TryParse(x.Token[2], out version))
    .Select(x => new {x.Directory, Date = x.Token[1], Version = version})
    .OrderByDescending(x => x.Version)
    .FirstOrDefault();
if (lastVersion != null)
    Console.WriteLine(lastVersion.Directory.FullName);

关于c# - 按字符串排序列表以查找较新版本 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36577121/

相关文章:

c# - 窗口关闭时线程不会终止

linux - 在 BASH 中以特定格式列出多个文件

c# - 如何在 C# 中列出 %TEMP% 和 %USERNAME% 目录?

android - 如何在 Android Studio 中添加 'libs' 文件夹?

c# - 使用字符串作为 DbSet 的类型,如 EF-Code First 中的 DbSet<string>

c# - 如何将 MAC 地址从字符串转换为无符号整数

c# - 如何在 C# Excel Interop 中将文本添加到现有形状(文本框)

c - 在C中对char指针数组进行排序

string - 使用另一个排序顺序字符串对字符串进行排序

java - 读取jar文件中目录中的文件