UniRx第二季学习[linq与UniRx](一) ------ 复习总结/where/select
课程地址 :
凉鞋大大的,可以的话大家多支持一波~
一.第一季总结
二.Where
功能 : 过滤作⽤
1.Linq
public class LINQWhereQueryExample : MonoBehaviour
{
class Student
{
public string Name;
public int Age;
}
// Use this for initialization6
void Start()
{
var students = new List<Student>()
{
new Student() {Name = "张三", Age = 50},
new Student() {Name = "张三", Age = 50},
new Student() {Name = "李四", Age = 40}
};
//查询式写法
var oldStudents = from oldStudent in students where oldStudent.Age > 45 select oldStudent;
//链式写法
var oldStudents = students.Where(student => student.Age > 45);
foreach (var student in oldStudents)
{
Debug.Log(student.Name);
}
}
2.UniRx
void Start()
{
//查询式写法
(from updateEvent in Observable.EveryUpdate()
where Input.GetMouseButtonDown(0)
select updateEvent)
.Subscribe(_ =>
{
Debug.Log("mouse down");
}).AddTo(this);
//链式写法
Observable.EveryUpdate()
.Where(_ => Input.GetMouseButtonDown(0))
.Subscribe(_ => { Debug.Log("mouse down"); })
.AddTo(this);
}
三.Select
介绍 Where 操作符的时候,不管是 UniRx 还是 LINQ,其查询表达式都多出了⼀个select。但是在链式的写法中,却没有使⽤其对应的 Select 操作符, 查询式写法中,编译器要求必须要在最后 select ⼀下。⽽链式写法,我们可以理解成省略掉了。(其实就是选择了⼀下⾃⼰。除了选择⾃⼰,其实还可以选择⼀个其他类型的变量作为结果。)
功能 : 查询表达式中的 select 及所接⼦句是放在最后并把⼦句中的变量也就是结果返回回来。
实现当每次抬起⿏标左键,则输出 mouse up :
1.linq
class Student
{
public string Name;
public int Age;
}
void Start()
{
var students = new List<Student>()
{
new Student { Name = "张三", Age = 18 },
new Student { Name = "张三", Age = 18 },
new Student { Name = "李四", Age = 10 },
};
//链式写法
students.Where(student => student.Age > 10)
.Select(student => student.Name)
.ToList()
.ForEach(studentName =>
{
Debug.Log(studentName);
});
//查询式写法
(from student in students where student.Age > 10 select student.Name)
.ToList()
.ForEach(studentName =>
{
Debug.Log(studentName);
});
}
2.UniRx
void Start()
{
//链式写法
Observable.EveryUpdate()
.Where(_ => Input.GetMouseButtonDown(0))
.Select(_ => "mouse down")
.Subscribe(mouseEventName =>
{
Debug.Log(mouseEventName);
})
.AddTo(this);
//查询式写法
(from updateEvent in Observable.EveryUpdate() where Input.GetMouseButtonDown(0) select "mouse down")
.Subscribe(mouseEventName => Debug.Log(mouseEventName))
.AddTo(this);
}