UniRx第二季学习[linq与UniRx](二) ------ First/Distinct/Last

课程地址 : 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);
                    });
        }

猜你喜欢

转载自blog.csdn.net/dengshunhao/article/details/85695666