2013-09-25 32 views
1

我想知道在ArrayList中是否有方法可以搜索以查看記錄是否包含某些字符,如果是,則抓取整個句子並放入變成一個字符串。例如:檢查ArrayList C#中的字符是否存在 - C#(2.0)

list[0] = "C:\Test3\One_Title_Here.pdf"; 
list[1] = "D:\Two_Here.pdf"; 
list[2] = "C:\Test\Hmmm_Joke.pdf"; 
list[3] = "C:\Test2\Testing.pdf"; 

尋找:"Hmmm_Joke.pdf"
想要得到的:"C:\Test\Hmmm_Joke.pdf",並把它放在Remove()

protected void RemoveOther(ArrayList list, string Field) 
    { 
     string removeStr; 

     -- Put code in here to search for part of a string which is Field -- 
     -- Grab that string here and put it into a new variable -- 
     list.Contains(); 
     list.Remove(removeStr); 

    } 

希望這是有道理的。謝謝。

+3

爲什麼你在'List '上使用'ArrayList'? –

+0

導致他們正在使用。 – user2800287

+1

您正在屏蔽Field變量。這將清除傳入該函數的任何值。只是要清楚,在你的例子中,你想從arrayList中刪除包含「Hmmm_Joke.pdf」的元素? –

回答

4

遍歷數組列表中的每個字符串,如果字符串不包含搜索詞然後將其添加到新的列表,像這樣:

string searchString = "Hmmm_Joke.pdf"; 
ArrayList newList = new ArrayList(); 

foreach(string item in list) 
{ 
    if(!item.ToLower().Contains(searchString.ToLower())) 
    { 
     newList.Add(item); 
    } 
} 

現在你可以用已經排除了新的列表工作搜索字符串值的任何匹配。

注意:爲避免套管問題,製作字符串爲小寫字母以便比較。

+0

這就是我要建議的。如果你想做其他的事情,它返回一個字符串與返回項目; –

+0

也許最好確定它是否區分大小寫。我也會使用LINQ遍歷列表。因爲不太可能知道我們是否在不同的文件夾中有不同的Hmm_Joke.pdf。參考:http://www.codeproject.com/Questions/411787/Search-for-a-string-within-the-string-of-IEnumerab – Dorival

+1

這段代碼不會工作,它會拋出一個'InvalidOperationException','' ArrayList'在迭代時不能被修改。 –

1

爲了從您的ArrayList中刪除一個值,您需要遍歷值並檢查每個值是否包含所需的值。跟蹤那個指數,或者指數如果有很多。

然後,在找到想要刪除的所有值後,可以撥打ArrayList.RemoveAt刪除所需的值。如果要刪除多個值,請從最大的索引開始,然後處理較小的索引,否則,如果先刪除最小的索引,索引將關閉。

0

這將做的工作沒有提出一個InvalidOperationException:

string searchString = "Hmmm_Joke.pdf"; 
foreach (string item in list.ToArray()) 
{ 
    if (item.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0) 
    { 
     list.Remove(item); 
    } 
} 

我也做了它不區分大小寫。

祝你好運與你的任務。

0

我寧願使用LINQ來解決這個問題。由於IEnumerables是不可變的,我們應該首先得到我們想要刪除的內容,然後刪除它。

 var toDelete = Array.FindAll(list.ToArray(), s => 
      s.ToString().IndexOf("Hmmm_Joke.pdf", StringComparison.OrdinalIgnoreCase) >= 0 
      ).ToList(); 

     toDelete.ForEach(item => list.Remove(item)); 

當然,使用硬編碼的變量。

我也建議讀這樣的問題:因爲它的成本大量的性能和文件名打交道時,可能會導致意外的行爲Case insensitive 'Contains(string)' 它討論與字符工作的正確方法,因爲轉換爲大寫/小寫喜歡:文書.pdf