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

