我有一個這樣的名單:的FindAll搜索問題
item.Add("a");
item.Add("as");
item.Add("b");
item.Add("fgs");
item.Add("adsd");
我如何才能找到與(例如)「A」開頭的所有項目?
這個「a」不是一些硬編碼的字符串,所以我將需要一個函數爲每個字符串執行此操作。
我嘗試使用FindAll,但我沒弄清楚它是如何工作的。
BR,Wolfy
我有一個這樣的名單:的FindAll搜索問題
item.Add("a");
item.Add("as");
item.Add("b");
item.Add("fgs");
item.Add("adsd");
我如何才能找到與(例如)「A」開頭的所有項目?
這個「a」不是一些硬編碼的字符串,所以我將需要一個函數爲每個字符串執行此操作。
我嘗試使用FindAll,但我沒弄清楚它是如何工作的。
BR,Wolfy
如果通過「開始」你的意思是第一個字符,則:
item.FindAll(i => i[0] == 'a');
,如果你的意思是一個字符串(可能比1和焦炭等),則:
item.FindAll(i => i.StartsWith("a"));
如果你想一個不同的比較,如不區分大小寫,基於地區的,等等,那麼做相關的IndexOf如:
item.FindAll(i => i.IndexOf("a", StringComparison.CurrentCultureIgnoreCase) == 0);
所有的上面可以很容易地適應使用相關的字符或字符串變量或參數。
如果您不需要通過一個列表提供額外的屬性和方法,那麼這將是更有效地使用Where
比FindAll
爲FindAll
創建一個新的列表,並在所有一次這樣做,而Where
將枚舉匹配結果就像迭代一樣。
試試這個
item.FindAll(i => i.Contains("a"));
這將返回一個列表只containting的過濾字符串。
或者與LINQ
from i in items where i.StartsWith("a") select i;
爲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);
});
}
我想你有另一個包含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))
);
此結果包含以關鍵字中的任意關鍵字開始的詞。
+1我認爲這是OP想要的。並建議:將變量名稱從「list」更改爲「keywords」,並將「item」更改爲「words」。 – 2010-09-20 09:16:21
謝謝陳丹妮。我根據您的建議編輯了我的答案。 – 2010-09-20 10:31:34
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"));
不是'StartsWith'而不是'Contains'? – 2010-09-20 09:10:20
@Brian:應該是StartsWith。我快速閱讀他的問題。 – 2010-09-20 09:35:07