2012-07-24 251 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

相關問題