我有一个这样的列表:
item.Add("a");
item.Add("as");
item.Add("b");
item.Add("fgs");
item.Add("adsd");
如何找到以(例如)“a”开头的所有项目?
这个“a”不是一些硬编码的字符串,所以我需要一个对每个字符串执行此操作的函数。
我尝试使用 FindAll,但我没有弄清楚它是如何工作的。
兄弟,狼
如果“开始于”是指第一个字符,那么:
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
asFindAll
创建一个新列表更有效,并且一次完成所有操作,同时Where
会在迭代时枚举匹配结果.
或者使用 LINQ
from i in items where i.StartsWith("a") select i;
对于 NET2.0,您可以使用此方法:'pattern' 是要查找的参数 (fe "a")
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))
);
此结果包含以关键字中的任何关键字开头的单词。
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"));
试试这个
item.FindAll(i => i.Contains("a"));
这将返回一个仅包含过滤字符串的列表。