我必须找到通过lambda列表中的参数数组传递的名称。我应该迭代从数组中搜索相等的名字吗?
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:
我只关注实际的Lambda。是否匹配精确的输出结果取决于您
但是,您可以直接使用Contains
确定序列是否包含指定的元素。
static List<Student> FindStudents(List<Student> students, params string[] search)
=> students.FindAll(i => search.Contains(i.Name));
或者如果你想要一个快速的不区分大小写的搜索,你可以使用HashSet
和StringComparer
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
<子>注意:这些方法缺少适当的输入检查子>