【问题标题】:Using predicate to find strings that start with a specific letter (C#)使用谓词查找以特定字母开头的字符串 (C#)
【发布时间】:2013-10-07 09:19:59
【问题描述】:

我对使用谓词在集合中查找特定内容非常陌生。 这是我的例子:

static void FindPersons(string firstLetter)
        {
            List<string> names = new List<string>()
        {"Marcus", "John", "Jesse", "Lance", "Aaron", "Archibald", "Victor"
        };



            List<string> names2 = names.FindAll(a => a.StartsWith(firstLetter));

            foreach (var name in names2)
            {
                Console.WriteLine(name);
            }
        }

我会在 Main 中调用该方法:

FindPersons("a");

我必须使用字符串作为第一个字母,因为 StartsWith 将字符串作为参数(或者我可以使用 char 和 ToString()。

如何使用这种更短的语法来做到这一点? 还有一个问题 - 通常,在您的工作中,您多久使用一次谓词来查找集合中的特定对象? 谢谢。

【问题讨论】:

  • 什么你的问题是什么?您可以使用names.Where(n =&gt; n.StartsWith(firstLetter)) 而不是List.FindAll。但是,这并没有太大的区别。您的第二个问题只是基于意见。
  • Nit pick: FindPersons 应该返回列表。 PrintPeople 应该写到控制台..
  • names.FindAll(a =&gt; a.StartsWith(firstLetter)).ForEach(Console.WriteLine);

标签: c# .net generics predicate


【解决方案1】:

只需使用Console.WriteLine(string.Join&lt;string&gt;("\n", result)); 如下方法即可。

    static void FindPersons(string firstLetter)
    {
        List<string> names = new List<string>()
        {"Marcus", "John", "Jesse", "Lance", "Aaron", "Archibald", "Victor"
        };

        List<string> result = names.Where(a => a.StartsWith(firstLetter, StringComparison.InvariantCultureIgnoreCase)).ToList();
        Console.WriteLine(string.Join<string>("\n", result));

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 2015-07-14
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多