查找/消除重复字符串的方法

时间:2011-08-14 22:49:39

标签: c# asp.net .net vb.net string

我试图找到一个解决方案,消除重复的字符串名称,比如说, 在文字字段中,我填写了某篇文章的历史版本的贡献者的名字,因此,如果“ron”对文章的版本化做出了3次贡献,则名称“ron”被添加到此文字控件中,并输出“ron”3次。

我试图找到,如果一个名字重复两次,我应该只能填充一次。我怎样才能做到这一点?

5 个答案:

答案 0 :(得分:2)

我建议您使用其键将是作者姓名的字典(或您不希望重复的字段),值将是贡献者列表。例如,

Dictionary<string, List<Contributor>> contributors 
           = new Dictionary<string, List<Contributor>>();


Contributor contributor = new Contributor("ron", /*other values*/);
if ( !contributors.ContainsKey(contributor.Name) )
     contributors.Add(contributor.Name,new List<Contributor>());

contributors[contributor.Name].Add(contributor);

答案 1 :(得分:1)

根据您的设置,我要么使用StringCollection,只是在插入之前检查名称是否存在,或者只是将所有名称添加到List并调用Distinct()(System.Linq中的扩展方法)。所以:

StringCollection Names=new StringCollection();
if(!Names.Contains(Name))
   Names.Add(Name);

正如CharithJ建议的那样,或者:

List<string> Names=new List<string>();
Names.Add(Name);
...
foreach(string Name in Names.Distinct())
{
...
}

两者都可以运作得很好。

答案 2 :(得分:0)

使用C#s .Contains()函数检查名称是否已添加到字符串

答案 3 :(得分:0)

创建您想要实现的模型(它就像一个视图模型),驱动您的“报告”的呈现。然后,模型可以控制“仅输出每个名称一次”的要求。伪代码如下:

var ron = new Author("ron");
var ronnie = new Author("ronnie");
var report = new HistoryReport();
report.AddVersion(1, ron);
report.AddVersion(2, ron);
report.AddVersion(3, ronnie);
string renderedReport = report.Render();
// output e.g.: 
//   Versions 1 and 2 by ron; Version 3 by ronnie

然后使用该输出来填充文字控件。

如果您使用简单的字符串替换,则会将ronronnie混淆。

答案 4 :(得分:0)

StringCollection authors= new StringCollection();

if (!authors.Contains("Ron"))
{
    authors.Add("Ron");
}