使用辅助类解析文本文件,获取电影最新版本条目
搞定!获取电影最新版本并筛选目标结果
嘿,我明白你的需求了——从给定的电影文本数据里,先找出每个电影的最新版本,再筛选出那些版本号最高的电影(也就是你要的DDLJ和the hero)。我来帮你补全并优化C#代码,一步步实现:
核心思路拆解
- 把文本拆成结构化数据:把杂乱的字符串拆成电影名、作者、版本号三个字段,方便后续处理。
- 按电影名分组找最新版本:同一个电影可能有多个版本,我们要每组里挑出版本号最大的那个。
- 筛选版本最高的电影:从所有电影的最新版本里,找出版本号登顶的那些电影。
完整可运行代码
using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using System.IO; // 读取文件时需要引用这个命名空间 class MovieVersionHandler { static void Main() { // 如果你是从文件读取数据,把下面这行换成 File.ReadAllText("你的文件路径") string rawData = "xxx, Author1, v6;the net, author1, v7;xxx, author3, v10;DDLJ, author3, v11;the fire, author5, v6;the health, author1, v8;the health, author7, v2;the hero, author9, v11;the hero, author8, v3"; // 1. 拆分数据为单个条目,过滤无效数据 var movieEntries = rawData.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries) .Select(line => line.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries)) .Where(parts => parts.Length == 3); // 确保每个条目都包含三个有效字段 // 2. 转换为带数字版本号的对象,方便版本比较 var parsedMovies = movieEntries.Select(parts => new { Name = parts[0].Trim(), Author = parts[1].Trim(), Version = int.Parse(Regex.Match(parts[2], @"\d+").Value) // 从vX格式中提取纯数字版本号 }); // 3. 按电影名分组,提取每组的最高版本 var latestVersionsPerMovie = parsedMovies.GroupBy(m => m.Name) .Select(group => new { MovieName = group.Key, LatestVersion = group.Max(m => m.Version) }); // 4. 找出所有电影里的最高版本号,再筛选对应电影 int topVersionNumber = latestVersionsPerMovie.Max(m => m.LatestVersion); var targetMovies = latestVersionsPerMovie.Where(m => m.LatestVersion == topVersionNumber) .Select(m => m.MovieName); // 输出结果 Console.WriteLine("符合预期的电影:"); foreach (var movie in targetMovies) { Console.WriteLine(movie); } // 最终输出:DDLJ、the hero } }
关键细节说明
- 文本拆分适配:注意你的原始文本用的是中文分号,所以拆分时要对应使用
";";如果是英文分号,改成";"即可。 - 版本号安全比较:用正则表达式提取版本号里的纯数字,避免直接比较字符串(比如
"v11"和"v3"字符串比较会出错)。 - 文件读取适配:如果数据存储在本地文本文件中,只需要把
rawData替换成File.ReadAllText("你的文件完整路径")即可。
这样运行代码就能得到你想要的结果啦!
内容的提问来源于stack exchange,提问作者AskMe
相关产品推荐
相关产品推荐

