LINQ实现四个小功能(第十一周作业)

class Student{
    public int StudentID { get; set; }
    public String StudentName { get; set; }
    public int Age { get; set; }
}class Program{
    static void Main(string[] args)    {
        Student[] studentArray = { 
            new Student() { StudentID = 1, StudentName = "John", Age = 18 },
            new Student() { StudentID = 2, StudentName = "Steve",  Age = 21 },
            new Student() { StudentID = 3, StudentName = "Bill",  Age = 25 },
            new Student() { StudentID = 4, StudentName = "Ram" , Age = 20(第二问第三问为21) },
            new Student() { StudentID = 5, StudentName = "Ron" , Age = 31 },
            new Student() { StudentID = 6, StudentName = "Chris",  Age = 17 },
            new Student() { StudentID = 7, StudentName = "Rob",Age = 19  },
        };

        //待补全...
    }
}


补全代码,通过LINQ实现如下功能:
(1)筛选数组studentArray,筛选条件是名字中包含‘o'的学生信息,并且年龄大于20,将满足条件的学生信息输出到命令

对于本题,可以使用Where来查询特定条件,.Contains("")代表了对双引号内部字符串进行模糊匹配,或使用布尔函数对string类型进行遍历搜索该字符串是否含有”o“,代码如下所示。

var list = studentArray.Where((s) => s.Age > 20 && s.StudentName.Contains("o"));

foreach(var temp in list)

{

     Console.WriteLine("{0} {1} {2}", temp.StudentID, temp.StudentName, temp.Age);

}

(2)将数组studentArray排序,要求根据年龄排序,如果年龄相同,根据StudentID排序,将排序后的学生信息输出到命令行

对于本题,可以利用OrderBy来进行第一重年龄判断,如果年龄相等则使用ThenBy来进行第二重学生ID判断,代码如下所示。

var list1 = studentArray.OrderBy((s) => s.Age).ThenBy((s) => s.StudentID);

        foreach (var temp in list1)

        {

            Console.WriteLine("{0} {1} {2}", temp.StudentID, temp.StudentName, temp.Age);

        }
(3)根据SudentID进行分组,输出SudengtId分别为奇数/偶数的学生信息

对于本题,可以使用Join方法将两个集合进行指定键合并来判断奇偶,先创建一个集合,包括奇偶判断部分--ID和奇偶输出部分--RewardName。

class JISHU
{
    public int ID { get; set; }
    public String RewardName { get; set; }
}

之后为该集合插入数据,用来之后的ID奇偶判断。

JISHU[] jishu ={
        new JISHU(){ ID=1,RewardName="奇数"},
        new JISHU(){ ID=0,RewardName="偶数"},
        };

之后使用Join方法,要进行合并的接口键分别为Student集合的StudentID和JISHU集合的ID,对StudentID对2取余在和ID进行比较,即1为奇数,0为偶数,此时如果二者相等则对二者进行连接。

var list2 = studentArray.Join(jishu, p => p.StudentID%2, r => r.ID, (p, r) => new { pList=p,rList=r});

        foreach (var temp in list2)

        {

            Console.WriteLine("{0} {1} {2} {3}", temp.pList.StudentID, temp.pList.StudentName, temp.pList.Age,  temp.rList.RewardName);

        }
(4)输出sudengtArray信息,要求不输出SudengtID字段,输出SudengtName和Age,其中SudengtName要求根据Gender增加Mr. 和Ms. 前缀 。
class Student{
    public int StudentID { get; set; }
    public String StudentName { get; set; }
    public int Age { get; set; }
    public String Gender { get; set; }
}class Program{
    static void Main(string[] args)    {
        Student[] studentArray = { 
            new Student() { StudentID = 1, StudentName = "John", Age = 18, Gender = "Male" },
            new Student() { StudentID = 2, StudentName = "Steve",  Age = 21, Gender = "Male" },
            new Student() { StudentID = 3, StudentName = "Bill",  Age = 25, Gender = "Male" },
            new Student() { StudentID = 4, StudentName = "Ram" , Age = 21, Gender = "Male" },
            new Student() { StudentID = 5, StudentName = "Ron" , Age = 31, Gender = "Female" },
            new Student() { StudentID = 6, StudentName = "Chris",  Age = 17, Gender = "Female" },
            new Student() { StudentID = 7, StudentName = "Rob",Age = 19, Gender = "Male"  },
        };

        //待补全...
    }
}

对于本题,我们依然可以使用Contain进行模糊匹配,代码如下。

var list3 = studentArray.Where((s) => s.Gender.Contains("Male"));

        foreach (var temp in list3)

        {

            Console.WriteLine("{0} Mr.{1} {2}", temp.StudentID, temp.StudentName, temp.Age);

        }

        Console.WriteLine();

        var list4 = studentArray.Where((s) => s.Gender.Contains("Female"));

        foreach (var temp in list4)

        {

            Console.WriteLine("{0} Ms.{1} {2}", temp.StudentID, temp.StudentName, temp.Age);

        }

输出截图:

 

 

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值