如何获取版本字符串

时间:2018-05-15 06:05:05

标签: c# linq

如何使用c#和LINQ从字符串集合中获取最大值? 例如:

List<String> lst = new List<String> { "1.0.0", "1.0.2", "1.0.15", "1.1.0" };

示例1: - 比较1.0.0和1.1.0,最大版本是1.1.0 例2: - 比较1.0.2和1.0.15,最大版本是1.0.15 示例3: - 比较1.0.0和1.0.2,最大版本是1.0.2。

4 个答案:

答案 0 :(得分:5)

考虑使用.Net Version class

您可以从字符串创建它,它已经以您可能需要的方式处理比较

    Version v1 = new Version("1.2.3.4");
    Version v2 = new Version("1.3.0");
    Console.WriteLine(v2>v1);

在你的情况下,使用Linq,你可以拥有

    List<String> lst = new List<String> { "1.0.0", "1.0.2", "1.0.15", "1.1.0" };

    Version maxVersion = lst.Select(s=> new Version(s)).Max();
    Console.WriteLine(maxVersion);

答案 1 :(得分:2)

在您给出的示例中,您可以将它们排序为字符串。但我强烈建议你不要这样做 - 否则“11.0.0”会被视为早于“2.0.0”。

相反,我建议创建一个带有major / minor / patch值的Version类。这可以以明显的方式实现IComparable<Version>。解析所有字符串以创建List<Version>,然后您可以在列表中找到最大值(或对整个列表进行排序)。如果你愿意,你甚至可以使用System.Version类,虽然它看起来只需要三个部分就支持四个部分。如果你不介意它支持的部分比你需要的多,那肯定比编写自己的部分简单。

List<String> list = new List<String> { "1.0.0", "1.0.2", "1.1.0" };
List<Version> versions = list.Select(x => Version.Parse(x)).ToList();
Version maxVersion = versions.Max();

如果您不需要任何其他版本,则甚至不需要第二个列表 - 只需将投影传递到Max

List<String> list = new List<String> { "1.0.0", "1.0.2", "1.1.0" };
Version maxVersion = list.Max(x => Version.Parse(x));

将值解析为Version个对象会使它们 更容易使用,而不是将它们作为字符串。例如,您可以按主要版本号,甚至“超过1.0.5的任何内容”或任何您想要的内容进行过滤。通常,最好将字符串解析为尽可能早地表示您正在使用的数据的类型,并且只能尽可能晚地再次格式化以进行显示。这适用于字符串,数字,所有内容。

答案 2 :(得分:1)

List<string> lst = new List<string> { "1.0.0", "1.0.2", "1.0.15", "1.1.0" };
var value = lst.Max(x => new Version(x));

Result=1.1.0

答案 3 :(得分:-2)

String test = ""1.0.0", "1.0.2", "1.1.0"";
String[] testArray = test.split(", ");

int max = Integer.MIN_VALUE, maxIndex = 0;

for (int i = 0; i < testArray.length; i++) {
     if (Integer.parseInt(testArray[i]) > max) {
         max = Integer.parseInt(testArray[i]);
         maxIndex = i;
     }
}

希望这能帮到你。