课程地址 : http://www.sikiedu.com/my/course/293
凉鞋大大的,可以的话大家多支持一波~
一.First
功能 : 取序列中的第⼀个元素。First 有两种形式,⼀种是直接获取第⼀个元素,第⼆种则是取序列中满⾜条件的第⼀个元素。
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 },
};
//直接获取第⼀个元素
var oldStudent = students
.Where(student => student.Age > 45)
.First();
//取序列中满⾜条件的第⼀个元素
//链式
var newStudent = students.First(student => student.Age < 15);
Debug.Log(newStudent.Name);
//查询式
var newStudent = (from student in students select student)
.First(student => student.Age < 15);
Debug.Log(newStudent.Name);
}
2.UniRx
void Start()
{
Observable.EveryUpdate()
.First(_ => Input.GetMouseButtonDown(0))
.Subscribe(_ => { Debug.Log("mouse down"); })
.AddTo(this);
}
二.Distinct
功能 : 筛选序列中不相同的值。⽤于查询不重复的结果集。
1.Linq
void Start()
{
var urls = new List<string>
{
"http://sikiedu.com",
"http://sikiedu.com",
"http://qframework.io",
"http://qframework.io"
};
urls.Distinct()
.ToList()
.ForEach(url => Debug.Log(url));
}
2.UniRx
void Start()
{
var leftMouseClickStream = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(0)).Select(_ => "LeftMouseClicked");
var rightMouseClickStream = Observable.EveryUpdate().Where(_ => Input.GetMouseButtonDown(1)).Select(_ => "RightMouseClicked");
Observable.Merge(leftMouseClickStream, rightMouseClickStream)
.Distinct()
.Subscribe(mouseEvent =>
{
Debug.Log(mouseEvent);
});
}
以上代码结果为,不管点击多少次⿏标左键,还是⿏标右键,输出只输出⼀次 “left clicked” 和 “right clicked”。
三.Last
功能 : 取序列中的最后⼀个元素
1.linq
void Start()
{
var students = new List<Student>()
{
new Student { Name = "张三", Age = 18 },
new Student { Name = "张五", Age = 18 },
new Student { Name = "李四", Age = 10 },
};
var lastStudent = students.Last(student => student.Age > 10);
Debug.Log(lastStudent.Name);
}
2.UniRx
void Start()
{
// completed
var obserble = Observable.Create<int>(observer =>
{
observer.OnNext(3);
observer.OnNext(5);
observer.OnNext(1);
observer.OnCompleted();
return Disposable.Create(() => { Debug.Log("dispose"); });
});
obserble.Last(number=>number > 2)
.Subscribe(value =>
{
Debug.Log(value);
});
}