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

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

嘿,我来帮你搞定这个C#程序的修改!咱们一步步来实现需求:从标准输入读取产品-库-版本的数据,先找出每个库的最新版本,再把那些至少用了一个过时库版本的产品找出来输出。

完整实现代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

public class ProductLibraryProcessor
{
    public static void Main()
    {
        var result = ProcessData();
        foreach (var product in result)
        {
            Console.WriteLine(product);
        }
    }

    public static List<string> ProcessData()
    {
        // 存储每个库的最新版本号(转成数字方便比较)
        var libraryLatestVersions = new Dictionary<string, int>();
        // 存储所有产品的库使用记录:key是产品名,value是该产品用到的库+版本集合
        var productLibraryUsages = new Dictionary<string, List<(string LibraryName, int VersionNumber)>>();
        
        string inputLine;
        // 从标准输入逐行读取数据,直到输入结束
        while ((inputLine = Console.ReadLine()) != null)
        {
            var fields = inputLine.Split(',');
            if (fields.Length != 3)
            {
                // 跳过格式错误的行,避免程序崩溃
                continue;
            }
            
            string productName = fields[0].Trim();
            string libraryName = fields[1].Trim();
            string versionStr = fields[2].Trim();
            
            // 提取版本号里的数字(比如从v3里拿到3)
            if (!Regex.TryMatch(versionStr, @"v(\d+)", out var versionMatch))
            {
                // 跳过版本格式不符合要求的行
                continue;
            }
            
            int versionNumber = int.Parse(versionMatch.Groups[1].Value);
            
            // 更新产品的库使用记录
            if (!productLibraryUsages.ContainsKey(productName))
            {
                productLibraryUsages[productName] = new List<(string, int)>();
            }
            productLibraryUsages[productName].Add((libraryName, versionNumber));
            
            // 更新库的最新版本
            if (!libraryLatestVersions.ContainsKey(libraryName) || versionNumber > libraryLatestVersions[libraryName])
            {
                libraryLatestVersions[libraryName] = versionNumber;
            }
        }
        
        // 收集所有使用过时库的产品(用HashSet自动去重)
        var outdatedProducts = new HashSet<string>();
        foreach (var (productName, usages) in productLibraryUsages)
        {
            // 检查该产品是否有任意一个库的版本不是最新的
            bool hasOutdatedLib = usages.Any(usage => usage.VersionNumber < libraryLatestVersions[usage.LibraryName]);
            if (hasOutdatedLib)
            {
                outdatedProducts.Add(productName);
            }
        }
        
        return outdatedProducts.ToList();
    }
}
关键细节说明
  • 版本号正确比较:用正则表达式@"v(\d+)"提取版本号中的数字,避免直接字符串比较出现"v10" < "v2"的错误。
  • 数据高效存储:用两个字典分别记录库的最新版本、产品的库使用情况,后续检查时不用重复遍历数据。
  • 自动去重:用HashSet<string>存储符合条件的产品,确保同一个产品即使多个库过时也只会被输出一次。
  • 容错处理:跳过格式错误的行(字段数不对、版本格式异常),提升程序健壮性。
示例验证

比如输入如下数据:

Mail Server,AuthLib,v1
File Sync,StorageLib,v2
Mail Server,StorageLib,v1
File Sync,AuthLib,v2
Chat App,AuthLib,v2
Chat App,StorageLib,v2

程序会识别出AuthLib和StorageLib的最新版本都是v2,其中Mail Server使用的两个库版本都过时,最终输出Mail Server。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:07:10