我有一个包含多个目录的文件夹,这些目录以某个更新版本命名,例如 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/