2012-07-24 185 views
-3

如何检查一个列表是否包含一个字符串或任何数字后跟该字符串? 我需要在列表中添加字符串。在将它添加到列表中时,我必须检查该列表中是否已存在该字符串。如果需要,用整数计数来插入该字符串。 这就是说,如果名称已经存在意味着它应该被插入为“Name1”。如果我再次添加名称意味着它应该插入为name2。等等...... 我该如何做到这一点?检查一个列表是否包含一个字符串

List<Names> NameList=new List<Names>(); 

Name name=new Name(); 
name.Name="Name"; 
NameList.Add(Name); 

Name name1=new Name(); 
name1.Name="Name"; 
NameList.Add(Name1); 

Name name2=new Name(); 
name2.Name="Name"; 
NameList.Add(Name2); 

Public class Name 
{ 
string Name {get;set; } 
} 
+1

尝试分享您的实际代码以获得更好的答案 - 您发布的样本不会编译。也请尝试再次阅读您的问题。你会很容易理解你是否是回答者,而对你的代码基础一无所知? – driis 2012-07-24 18:55:05

+0

您最后编辑的代码也不会编译。请参阅名称和名称。 – 2012-07-24 19:26:04

回答

1

你的代码不会编译,但我假设你正在谈论一个List<string>。如果是这样,算法可能是:

string val = "Name"; 
string toInsert = val; 
int n = 1; 
while(list.Contains(toInsert)) 
{ 
    toInsert = val + n++; 
} 
list.Add(toInsert); 
+0

似乎它会工作,但它会在我的嘴里留下酸味。似乎有一个更好的方法来构建整个事情,以避免N线性搜索... – Servy 2012-07-24 18:59:06

+0

实际上,这是行不通的。假设列表中包含“Cat”。如果我将此称为插入“猫”,它将添加“猫1”。如果我再次呼叫插入“Cat”,它将插入“Cat1”而不是“Cat2”。 List.Contains()实际上是进行itemwise ==比较,而不是逐项.contains(毕竟,List不能期望每个类型都实现Contains方法)。 – iheanyi 2014-02-25 18:41:58

0

您应该看看HashSet<T>类。

有了这个,你可以在O(1)中进行查找。但请注意,这使用您班级的方法Equals()GetHashCode()来检查是否相等。因此,要么将简单的字符串放入集合中进行检查,要么为您的Name类编写合适的IEqualityComparer并将其实例放入哈希集的构造函数中。如果您需要帮助来编写一个好的GetHashCode实施,请查看此SO question

相关问题