如果我有一个字符串变量值如下: -
string mystring = "TYPE1, TYPE1, TYPE2, TYPE2, TYPE3, TYPE3, TYPE4, TYPE4";
我想操纵这个字符串并按如下方式进行操作: -
string mystring = "TYPE1,TYPE2,TYPE3,TYPE4";
即我想删除其中的所有副本,我应该怎么做?
请帮忙。感谢。
答案 0 :(得分:11)
嗯,这是一个LINQ方法:
string deduped = string.Join(",", original.Split(',')
.Select(x => x.Trim())
.Distinct());
请注意,我使用的是Trim
,因为原始字符串在每个项目前都有空格,但结果却没有。
Distinct()
实际上并不保证将保留排序,但当前的实现是这样做的,这也是最自然的实现。我发现很难想象它会改变。
如果您使用的是.NET 3.5,则需要在.ToArray()
之后调用Distinct()
,因为.NET 4之前的string.Join
重载次数较少。
答案 1 :(得分:2)
您可以执行以下操作:
var parts = mystring.Split(',').Select(s => s.Trim()).Distinct().ToList();
string newString = String.Join(",", parts);
答案 2 :(得分:1)
string mystring = "TYPE1, TYPE1, TYPE2, TYPE2, TYPE3, TYPE3, TYPE4, TYPE4";
var split = mystring.Split(',');
var distinct = (from s in split select s).Distinct();
答案 3 :(得分:1)
string result = string.Join(",", mystring.Split(',').Select(s => s.Trim()).Distinct());
如果需要,您还可以在行中添加OrderBy()
来对字符串进行排序。
答案 4 :(得分:1)
我个人会在Jon Skeet的答案中选择Linq选项,所以我也赞成了,但只是为了给你另一个选择
List<string> parts = new List<String>();
foreach(string split in mystring.Split(','))
if(!parts.Contains(split))
parts.Add(split);
string newstr = "";
foreach(string part in parts)
newstr += part + ",";
这也适用于旧版本的C#。