修改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
相关产品推荐
相关产品推荐

