【问题标题】:how to get the largest value of version strings [duplicate]如何获得版本字符串的最大值[重复]
【发布时间】:2018-10-24 21:06:12
【问题描述】:

如何使用 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。

【问题讨论】:

标签: c# linq


【解决方案1】:

考虑使用.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);

【讨论】:

  • @HowardTeoh:请注意,您甚至可以稍微简化一下:Version maxVersion = lst.Max(s =&gt; Version.Parse(s));
【解决方案2】:

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

相反,我建议创建一个具有主要/次要/补丁值的Version 类。这可以很明显地实现IComparable&lt;Version&gt;。解析所有字符串以创建List&lt;Version&gt;,然后您可以在列表中找到最大值(或对整个列表进行排序)。如果你愿意,你甚至可以只使用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 的版本”或您想做的任何事情进行过滤。通常,最好尽早将字符串解析为代表您正在使用的数据的类型,并且尽可能晚地再次格式化以进行显示。这适用于字符串、数字等所有内容。

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      【解决方案4】:
      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;
           }
      }
      

      希望这能帮到你。

      【讨论】:

      • 你希望解析“1.0.0”做什么?这些值根本不是整数。 (此外,看起来您正在编写 Java 而不是 C#。)
      猜你喜欢
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 2021-05-25
      • 1970-01-01
      相关资源
      最近更新 更多