我有一个这样的清单:
item.Add("a");
item.Add("as");
item.Add("b");
item.Add("fgs");
item.Add("adsd");
如何查找以(例如)“a”开头的所有项目?
这个“a”不是一些硬编码的字符串,所以我需要一个为每个字符串执行此操作的函数。
我尝试使用FindAll,但我没弄清楚它是如何工作的。
Br,Wolfy
答案 0 :(得分:7)
如果用“开头”表示第一个字符,那么:
item.FindAll(i => i[0] == 'a');
如果你的意思是一个字符串(可能不是1个字符),那么:
item.FindAll(i => i.StartsWith("a"));
如果您需要不同的比较,例如不区分大小写,基于区域设置等,请执行相关的IndexOf,例如:
item.FindAll(i => i.IndexOf("a", StringComparison.CurrentCultureIgnoreCase) == 0);
以上所有内容都可以很容易地使用相关的char或字符串变量或参数。
如果您不需要列表提供的额外属性和方法,那么使用Where
比FindAll
更高效,因为FindAll
会创建新列表,并且同时执行所有操作,而Where
将在迭代过程中枚举匹配结果。
答案 1 :(得分:2)
或使用LINQ
from i in items where i.StartsWith("a") select i;
答案 2 :(得分:1)
对于NET2.0,您可以使用此方法: 'pattern'是一个寻找的参数(f.e。“a”)
private List<string> FindAll(List<string> list, string pattern)
{ // returns found results
return list.FindAll(delegate(string item)
{
return item.StartsWith(pattern);
});
}
答案 3 :(得分: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))
);
此结果的单词以关键字中的任意关键字开头。
答案 4 :(得分: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"));
答案 5 :(得分:0)
试试这个
item.FindAll(i => i.Contains("a"));
这将返回仅包含已过滤字符串的List。