如何比较两个版本号?
我不想要简单的1.0.0.0,但我正在寻找比较这些
1.0.0.1
1.0.0.1rc1 / 1.0.0.1-rc1
1.0.0.1b
1.0.0.1a / 1.0.0.1-a
等等
按照最新的方向订购。
引用PHP.net从他们想要的功能
version_compare()比较两个" PHP标准化的"版本号字符串。 该函数首先用点替换_, - 和+。在版本字符串中也插入点。在任何非数字之前和之后,例如' 4.3.2RC1'变成了4.3.2.RC.1'。然后它比较从左到右开始的部分。如果某个部分包含特殊版本字符串,则按以下顺序处理这些字符串:此列表中未找到的任何字符串< dev< alpha = a< beta = b< RC = rc< #< pl = p。这种方式不仅有不同级别的版本,如' 4.1'和' 4.1.2'可以比较任何包含开发状态的PHP特定版本。
如何做到这一点?
或者默认情况下是这样的吗?
答案 0 :(得分:7)
使用semantic version library for .Net
安装包:
Install-Package semver
您可以解析/比较版本。
示例1:比较
var v1 = new SemVersion(1, 0, 0, "rc1");
Console.WriteLine(v1);
var v2 = new SemVersion(1, 0, 0, "rc2");
Console.WriteLine(v2);
var r = SemVersion.Compare(v1,v2);
//If v1 < v2 return -1
//if v1 > v2 return +1
//if v1 = v2 return 0
Console.WriteLine(r); // -1
示例2:解析
var version = SemVersion.Parse("1.2.45-alpha-beta+nightly.23.43-bla");
Console.WriteLine(version);
Console.WriteLine( version.Major); //1
Console.WriteLine( version.Minor); //2
Console.WriteLine( version.Patch); //45
Console.WriteLine(version.Prerelease); //alpha-beta
Console.WriteLine(version.Build); //nightly.23.43
<强>更新强>
中的生活演示答案 1 :(得分:0)
答案 2 :(得分:0)
最好不要引用第三方的库,而只需引用 Nuget.Core 并利用其 SemanticVersion 类。此类的工作方式与.net中的标准Version对象非常相似,但遵循语义版本规范(https://semver.org)。它将字符串解析为IComparable和IEquatable对象,以便您可以比较多个版本或在集合中对它们进行排序等。
Nuget.Core:https://www.nuget.org/packages/nuget.core/(您可以通过nuget提取此库)
https://github.com/NuGet/NuGet2/blob/2.13/src/Core/SemanticVersion.cs
var rawVersions = new [] {"v1.4.0", "v1.4.0-patch10", "v1.4.0-patch2"};
var versions = rawVersions.Select(v => new SemanticVersion(v));
var sorted = versions.ToList().Sort();
答案 3 :(得分:0)
我比较两个版本的功能。版本示例“1.22.333.4444”
static int CompareVersions(string First, string Second)
{
var IntVersions = new List<int[]>
{
Array.ConvertAll(First.Split('.'), int.Parse),
Array.ConvertAll(Second.Split('.'), int.Parse)
};
var Cmp = IntVersions.First().Length.CompareTo(IntVersions.Last().Length);
if (Cmp == 0)
IntVersions = IntVersions.Select(v => { Array.Resize(ref v, IntVersions.Min(x => x.Length)); return v; }).ToList();
var StrVersions = IntVersions.ConvertAll(v => string.Join("", Array.ConvertAll(v,
i => { return i.ToString($"D{IntVersions.Max(x => x.Max().ToString().Length)}"); })));
var CmpVersions = StrVersions.OrderByDescending(i => i).ToList();
return CmpVersions.First().Equals(CmpVersions.Last()) ? Cmp : CmpVersions.First().Equals(StrVersions.First()) ? 1 : -1;
}
第一 > 第二 | 1 |
第一 == 第二 | 0 |
第一<第二 | -1 |