2010-09-20 30 views
4

我有一個這樣的名單:的FindAll搜索問題

item.Add("a"); 
item.Add("as"); 
item.Add("b"); 
item.Add("fgs"); 
item.Add("adsd"); 

我如何才能找到與(例如)「A」開頭的所有項目?

這個「a」不是一些硬編碼的字符串,所以我將需要一個函數爲每個字符串執行此操作。

我嘗試使用FindAll,但我沒弄清楚它是如何工作的。

BR,Wolfy

回答

7

如果通過「開始」你的意思是第一個字符,則:

item.FindAll(i => i[0] == 'a'); 

,如果你的意思是一個字符串(可能比1和焦炭等),則:

item.FindAll(i => i.StartsWith("a")); 

如果你想一個不同的比較,如不區分大小寫,基於地區的,等等,那麼做相關的IndexOf如:

item.FindAll(i => i.IndexOf("a", StringComparison.CurrentCultureIgnoreCase) == 0); 

所有的上面可以很容易地適應使用相關的字符或字符串變量或參數。

如果您不需要通過一個列表提供額外的屬性和方法,那麼這將是更有效地使用WhereFindAllFindAll創建一個新的列表,並在所有一次這樣做,而Where將枚舉匹配結果就像迭代一樣。

0

試試這個

item.FindAll(i => i.Contains("a")); 

這將返回一個列表只containting的過濾字符串。

+3

不是'StartsWith'而不是'Contains'? – 2010-09-20 09:10:20

+0

@Brian:應該是StartsWith。我快速閱讀他的問題。 – 2010-09-20 09:35:07

2

或者與LINQ

from i in items where i.StartsWith("a") select i; 
1

爲NET2.0你可以使用這個方法: '模式' 是一個參數,尋找(FE 「是」)

private List<string> FindAll(List<string> list, string pattern) 
    {  // returns found results 
      return list.FindAll(delegate(string item) 
          { 
           return item.StartsWith(pattern); 

          }); 
    } 
1

我想你有另一個包含startswith標準字符串的列表。讓我們打電話給你的項目「單詞」和其他列表「關鍵字」。所以下面的查詢將返回你想要的。

List<string> words = new List<string>(); 
words.Add("a"); 
words.Add("as"); 
words.Add("b"); 
words.Add("fgs"); 
words.Add("adsd"); 

List<string> keywords = new List<string>(); 
keywords.Add("a"); 
keywords.Add("b"); 

var result = words.FindAll(o => 
    keywords.Any(a => o.StartsWith(a)) 
); 

此結果包含以關鍵字中的任意關鍵字開始的詞。

+0

+1我認爲這是OP想要的。並建議:將變量名稱從「list」更改爲「keywords」,並將「item」更改爲「words」。 – 2010-09-20 09:16:21

+0

謝謝陳丹妮。我根據您的建議編輯了我的答案。 – 2010-09-20 10:31:34

1
List<string> item = new List<string>(); 
      item.Add("a"); 
      item.Add("as"); 
      item.Add("b"); 
      item.Add("fgs"); 
      item.Add("adsd"); 

      var res1 = item.FindAll(i => i.StartsWith("a")); 
      var res2 = item.Where(i => i.StartsWith("a"));