猿问

如果第一个子字符串在字符串列表中重复,如何删除元素?

我遇到一个情况,如果在逗号在另一个元素中重复之前“968934”部分是相同的,我想从列表中删除该元素。

如果子字符串部分重复,我只想将“655”元素保留在列表中。如果它没有重复,我想无论如何保留该元素。

我怎样才能做到这一点?

968934,655,814

968934,123,814


叮当猫咪
浏览 116回答 3
3回答

慕尼黑的夜晚无繁华

假设您从文件中获取输入,您可以简单地创建一个字典,其中 Key 是第一个子字符串,并且在读取文件时将子字符串添加到字典中(如果不存在)。最后,值将包含以该键开头的整行,但仅一次Dictionary<string, string> keys = new Dictionary<string,string>();foreach(string line in File.ReadLines("yourInputFile.csv")){&nbsp; &nbsp; if(!keys.ContainsKey(line.Split(',')[0]))&nbsp; &nbsp; &nbsp; &nbsp; keys.Add(line.Split(',')[0], line);&nbsp; &nbsp; &nbsp; &nbsp; // or, if you want only the second element&nbsp; &nbsp; &nbsp; &nbsp; //keys.Add(line.Split(',')[0], line.Split(',')[1]);}现在,您可以通过简单的操作轻松检索独特的线条string[] values = keys.Values.ToArray();当然,所有这些分割都可以只执行一次,添加一个中间数组变量,然后使用它Dictionary<string, string> keys = new Dictionary<string,string>();foreach(string line in File.ReadLines("yourInputFile.csv")){&nbsp; &nbsp; var splittedLine = line.Split(',');&nbsp; &nbsp; if(!keys.ContainsKey(splittedLine[0])&nbsp; &nbsp; &nbsp; &nbsp; keys.Add(splittedLine[0], line);&nbsp; &nbsp; &nbsp; &nbsp; // or, if you want only the second element&nbsp; &nbsp; &nbsp; &nbsp; //keys.Add(splittedLine[0], splittedLine[1]);}

倚天杖

您是否考虑过使用 group by 和 splitIEnumerable<string> ids = new List<string> {&nbsp; &nbsp; "968934,655,814",&nbsp; &nbsp; "968934,123,814"};ids = from i in ids&nbsp; &nbsp; &nbsp; group i by i.Split(',')[0] into g&nbsp; &nbsp; &nbsp; select g.FirstOrDefault();

达令说

使用 LINQ 和 GroupBy,您可以按字符串的第一段进行分组,如果有多个项目具有相同的第一段,则将其删除。var items = list&nbsp; &nbsp; .Select(s => new&nbsp;&nbsp; &nbsp; {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; FirstPart = s.Substring(0, s.IndexOf(',')),&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; String = s&nbsp; &nbsp; })&nbsp; &nbsp; .GroupBy(s => s.FirstPart)&nbsp; &nbsp; .SelectMany(g => g.Count() == 1&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ? new[] { g.First().String }&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; : g.Select(x => x.String.Substring(x.FirstPart.Length + 1)))&nbsp; &nbsp; .ToList();
随时随地看视频慕课网APP
我要回答