为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
叮当猫咪 2023-09-09 16:12:54
我遇到一个情况,如果在逗号在另一个元素中重复之前“968934”部分是相同的,我想从列表中删除该元素。如果子字符串部分重复,我只想将“655”元素保留在列表中。如果它没有重复,我想无论如何保留该元素。我怎样才能做到这一点?968934,655,814968934,123,814
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

假设您从文件中获取输入,您可以简单地创建一个字典,其中 Key 是第一个子字符串,并且在读取文件时将子字符串添加到字典中(如果不存在)。最后,值将包含以该键开头的整行,但仅一次


Dictionary<string, string> keys = new Dictionary<string,string>();

foreach(string line in File.ReadLines("yourInputFile.csv"))

{

    if(!keys.ContainsKey(line.Split(',')[0]))

        keys.Add(line.Split(',')[0], line);

        // or, if you want only the second element

        //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"))

{

    var splittedLine = line.Split(',');

    if(!keys.ContainsKey(splittedLine[0])

        keys.Add(splittedLine[0], line);

        // or, if you want only the second element

        //keys.Add(splittedLine[0], splittedLine[1]);

}


查看完整回答
反对 回复 2023-09-09
?
倚天杖

TA贡献1828条经验 获得超3个赞

您是否考虑过使用 group by 和 split


IEnumerable<string> ids = new List<string> {

    "968934,655,814",

    "968934,123,814"

};

ids = from i in ids

      group i by i.Split(',')[0] into g

      select g.FirstOrDefault();


查看完整回答
反对 回复 2023-09-09
?
达令说

TA贡献1821条经验 获得超6个赞

使用 LINQ 和 GroupBy,您可以按字符串的第一段进行分组,如果有多个项目具有相同的第一段,则将其删除。


var items = list

    .Select(s => new 

    { 

        FirstPart = s.Substring(0, s.IndexOf(',')), 

        String = s

    })

    .GroupBy(s => s.FirstPart)

    .SelectMany(g => g.Count() == 1 

        ? new[] { g.First().String } 

        : g.Select(x => x.String.Substring(x.FirstPart.Length + 1)))

    .ToList();


查看完整回答
反对 回复 2023-09-09
  • 3 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信