FindAll搜索问题

时间:2010-09-20 09:02:33

标签: c# list findall

我有一个这样的清单:

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

如何查找以(例如)“a”开头的所有项目?

这个“a”不是一些硬编码的字符串,所以我需要一个为每个字符串执行此操作的函数。

我尝试使用FindAll,但我没弄清楚它是如何工作的。

Br,Wolfy

6 个答案:

答案 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或字符串变量或参数。

如果您不需要列表提供的额外属性和方法,那么使用WhereFindAll更高效,因为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。