我用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()));
}
}
答案 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());