【问题标题】:How to get an Array of items contained in a List如何获取列表中包含的项目数组
【发布时间】:2021-01-29 02:49:55
【问题描述】:

我必须在带有 lambda 的 List 中找到通过参数数组传递的名称。我是否必须迭代以从数组中搜索相同的名称?

 partial class StudentTestScoresProgram
    {
        static public List<Student> GetStudents()
        {
            List<Student> students = new List<Student>
            {
                new Student { Name = "Michael", Scores = new int[] { 94, 92, 91, 91 } },
                new Student { Name = "Isabelle", Scores = new int[] { 66, 87, 65, 93, 86} },
                new Student { Name = "Chastity", Scores = new int[] { 76, 61, 73, 66, 54} },
                new Student { Name = "Chaim", Scores = new int[] { 94, 55, 82, 62, 52} },
                new Student { Name = "Patience", Scores = new int[] { 91, 79, 58, 63, 55} },
                new Student { Name = "Echo", Scores = new int[] { 74, 85, 73, 75, 86} },
                new Student { Name = "Pamela", Scores = new int[] { 73, 64, 53, 72, 68} },
                new Student { Name = "Anne", Scores = new int[] { 78, 96, 52, 79, 60} },
                new Student { Name = "Bruno", Scores = new int[] { 62, 66, 70, 82, 74} },
                new Student { Name = "Tanya", Scores = new int[] { 60, 77, 88, 99, 40} }

 };

            return students;
        }

  /// <summary>
        /// Find a set of students and display their information
        /// 
        /// You MUST use lambda or Predicate/delegate with FindAll for this.
        /// </summary>
        /// <param name="students">list of students</param>
        /// <param name="search">array of student names to find</param>
        static void FindStudents(List<Student> students, params string[] search)
        {
            //I have to fill the code in here. 
            List<Student> subArray = students.FindAll(i => i.Name == search[]); //This is what I was thinking of
        }

我要填代码,如何搜索数组?

程序是

 static void Main(string[] args)
        {
            List<Student> students = GetStudents();
            FindStudents(students, "Bruno", "Tanya", "Tony", "Sami");
            FindStudents(students, "Xerxes");
        }

输出应该是这样的

Searching for the following students:
Bruno
Tanya
Tony
Sami
Found the following students:
Name: Bruno, Scores: 62, 66, 70, 82
Name: Tanya, Scores: 60, 77, 88, 99
Searching for the following students:
Xerxes
Found the following students:

【问题讨论】:

    标签: c# arrays list lambda findall


    【解决方案1】:

    我只会关注实际的Lambda。匹配准确的输出结果由您决定

    但是,您可以只使用Contains

    确定序列是否包含指定元素。

    static List<Student> FindStudents(List<Student> students, params string[] search)
        => students.FindAll(i => search.Contains(i.Name));
    

    或者,如果您想要快速不区分大小写的搜索,您可以使用 HashSetStringComparer

    static void FindStudents(List<Student> students, params string[] search)
    {
        var hash = search.ToHashSet(StringComparer.InvariantCultureIgnoreCase);
        return students.FindAll(i => hash.Contains(i.Name));
    }
    

    示例

    var students = GetStudents();
    var results = FindStudents(students, "Pamela", "Anne", "Tony", "Sami");
    
    foreach (var result in results)
       Console.WriteLine($"{result.Name} : {string.Join(",", result.Scores)}");
    

    输出

    Pamela : 73,64,53,72,68
    Anne : 78,96,52,79,60
    

    注意:这些方法缺乏合适的输入检查

    【讨论】:

      猜你喜欢
      • 2011-03-29
      • 1970-01-01
      • 2016-07-07
      • 2014-05-26
      • 2021-05-02
      • 2018-01-17
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多