从逗号分隔的列表中删除重复项

时间:2019-05-09 17:23:15

标签: c#

我用C#编写了以下程序,以删除字符串中的重复元素。但是,该程序无法删除逗号分隔的字符串中的重复元素。有人可以帮助我,如何从逗号分隔的列表中删除以下代码中的重复项,如48375。

using System.IO;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        string inf = "48375 , 36143 , 66516 , 332674 , 107028 , 319546 , 362998 , 324285 , 110470 , 47870 , 17507 , 331420 , 59873 , 19531 , 107100 , 102487 , 97561 , 332674 , 322436 , 348305 , 44900 , 89921 , 41063 , 105962 , 319546 , 80476 , 363510 , 65760 , 344153 , 52328 , 51692 , 101922 , 359192 , 341859 , 37437 , 356670 , 37550 , 91952 , 349196 , 69361 , 52663 , 110705 , 48701 , 99730 , 343144 , 22001 , 66516 , 85782 , 362998 , 324285 , 16487 , 332329 , 352225 , 329868 , 36143 , 48375 , 97871";

        Console.Out.WriteLine(string.Join(" , ", inf.Split(',').Distinct().ToList().ToArray()));
    }
}

3 个答案:

答案 0 :(得分:7)

C#正常工作-您在输出中看到的两个48375确实是不同的(唯一)字符串。

您的第一个48375是"48375 ",结尾处有空格,而您的下一个48375是" 48375 ",开头和结尾处有空格。对于C#,这是完全不同的事情

想到了一些简单的方法可以解决此问题,但这绝不是详尽的清单:

  • 在开始之前删除所有空格,
  • 也将空格分开(删除空条目)或
  • 修剪每个项目的空格

以下是代码中的内容:

string.Join(" , ", inf.Replace(" ", "").Split(',').Distinct())

string.Join(" , ", inf.Split(new[]{',', ' '}, StringSplitOptions.RemoveEmptyEntries).Distinct())

string.Join(" , ", inf.Split(',').Select(e => e.Trim()).Distinct())

通常,您无需同时进行ToList()ToArray()-根据您是否计划执行更多操作(例如添加/删除项目)来选择其中一项(使用ToList() ),或者只是将数据作为简单数组进行某些只读访问(使用ToArray())。

在这种情况下,您甚至都不需要执行任何操作-string.Join可以处理IEnumerable<string>返回的Distinct()

答案 1 :(得分:1)

在不同操作之前使用修剪

            Console.Out.WriteLine(string.Join(" , ", inf.Split(',').Select(o=>o.Trim()).Distinct().ToList().ToArray()));

答案 2 :(得分:1)

请使用以下选项-

string uniqIds = string.Join(“,”,inf.Split(',')。Select(o => o.Trim())。ToList()。Distinct());