You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#程序修改:识别使用过时库版本的公司产品

搞定Library版本检查的代码修改方案

嘿,我来帮你完成这个需求!咱们先理清楚要做的三件事,然后一步步修改代码:

  • 先搞清楚每个Library的最新版本:毕竟版本号是v+数字格式,得把前缀去掉转成整数才能正确比较大小,比如v10肯定比v9新,字符串直接比就会出问题。
  • 找出用了非最新Library的产品:只要产品用的任意一个Library不是对应最新版,就得把它列出来。
  • 注意去重:同一个产品可能多个Library过时,不能输出好几次。

下面是修改后的完整代码,每一步都加了注释,方便你理解:

using System;
using System.Collections.Generic;
using System.Linq;

public class LibraryVersionChecker
{
    public static List<string> processData(IEnumerable<string> lines)
    {
        // 存储所有解析后的记录:产品名、Library名、版本号(转成整数)
        var allRecords = new List<(string ProductName, string LibraryName, int VersionNumber)>();
        // 存每个Library的最新版本号,key是Library名,value是数字版本
        var latestLibraryVersions = new Dictionary<string, int>();

        foreach (var line in lines)
        {
            // 拆分每行的三个字段,顺便去掉字段前后的空格
            var parts = line.Split(',').Select(p => p.Trim()).ToArray();
            // 跳过格式不对的行,避免报错
            if (parts.Length != 3) continue;

            string product = parts[0];
            string library = parts[1];
            // 把版本号的v前缀去掉,转成整数
            if (int.TryParse(parts[2].TrimStart('v'), out int version))
            {
                allRecords.Add((product, library, version));

                // 更新当前Library的最新版本:如果还没记录过这个Library,或者当前版本更大,就替换
                if (!latestLibraryVersions.ContainsKey(library) || version > latestLibraryVersions[library])
                {
                    latestLibraryVersions[library] = version;
                }
            }
        }

        // 用HashSet存过时产品,自动去重,不用手动处理重复
        var outdatedProducts = new HashSet<string>();

        foreach (var record in allRecords)
        {
            // 拿到当前Library的最新版本
            if (latestLibraryVersions.TryGetValue(record.LibraryName, out int latestVersion))
            {
                // 如果当前版本比最新版旧,就把产品加进去
                if (record.VersionNumber < latestVersion)
                {
                    outdatedProducts.Add(record.ProductName);
                }
            }
        }

        // 转成List返回
        return outdatedProducts.ToList();
    }

    static void Main(string[] args)
    {
        try
        {
            string line;
            var inputLines = new List<string>();
            while ((line = Console.ReadLine()) != null)
            {
                line = line.Trim();
                if (line != "") inputLines.Add(line);
            }
            var retVal = processData(inputLines);
            foreach (var res in retVal) Console.WriteLine(res);
        }
        catch (IOException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

关键点说明:

  • 版本号处理:必须把v前缀去掉转成整数,不然字符串比较会出错(比如v10和v9,字符串比较v10会比v9小,这显然不对)。
  • 容错处理:跳过格式错误的行,以及版本号无法转成整数的情况,确保程序不会因为脏输入崩溃。
  • 去重逻辑:用HashSet<string>存储产品名,自动帮我们去重,不用自己写判断逻辑,省心又高效。

举个实际测试的例子,如果输入是:

Mail Server,Logging Library,v2
Mail Server,Database Library,v1
Video Call Server,Logging Library,v1
Chat Server,Logging Library,v2
Chat Server,Database Library,v2

那么程序会输出Mail Server和Video Call Server,完全符合题目要求。

内容的提问来源于stack exchange,提问作者MotuPatlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:32:47