From 631f2cea14c6ec00a4b513308ec527dd6990b112 Mon Sep 17 00:00:00 2001
From: bicijinlian <bicijinlian@163.com>
Date: Sun, 8 Sep 2019 22:59:16 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=8D=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 LinqStudy.Test/LinqToObject/OrderTest.cs | 131 +++++++++++++++++------
 1 file changed, 99 insertions(+), 32 deletions(-)

diff --git a/LinqStudy.Test/LinqToObject/OrderTest.cs b/LinqStudy.Test/LinqToObject/OrderTest.cs
index 96ae0f3..f74bec9 100644
--- a/LinqStudy.Test/LinqToObject/OrderTest.cs
+++ b/LinqStudy.Test/LinqToObject/OrderTest.cs
@@ -24,18 +24,15 @@ namespace LinqStudy.Test.LinqToObject
         {
             List<Person> peoples = new List<Person>()
             {
-                new Person(){ Id = 1, Name = "张三", Age=33 },
-                new Person(){ Id = 3, Name = "李四", Age=65 },
-                new Person(){ Id = 2, Name = "王五", Age=17 },
+                new Person(){ Id = 3, Name = "张三", Age=33 },
+                new Person(){ Id = 5, Name = "王五", Age=55 },
+                new Person(){ Id = 4, Name = "李四", Age=44 },
             };
 
             var oprationItem = peoples.OrderBy(p => p.Id);
+            var firtName = oprationItem.First().Name;
 
-            var firtId = oprationItem.First().Id;
-            var lastId = oprationItem.Last().Id;
-
-            Assert.Equal(1,firtId);
-            Assert.Equal(3, lastId);
+            Assert.Equal("张三", firtName);
         }
 
         /// <summary>
@@ -46,21 +43,22 @@ namespace LinqStudy.Test.LinqToObject
         {
             List<Person> peoples = new List<Person>()
             {
-                new Person(){ Id = 1, Name = "张三", Age=33 },
-                new Person(){ Id = 3, Name = "李四", Age=65 },
-                new Person(){ Id = 2, Name = "王五", Age=17 },
+                new Person(){ Id = 3, Name = "张三", Age=33 },
+                new Person(){ Id = 5, Name = "王五", Age=55 },
+                new Person(){ Id = 4, Name = "李四", Age=44 },
             };
 
             var oprationItem = peoples.OrderBy(p => p.Id);
 
-            var addItem = new Person() { Id = 4, Name = "赵立", Age = 87 };
-            peoples.Add(addItem);
+            peoples.Insert(0, new Person() { Id = 6, Name = "赵六", Age = 66 });
 
-            var firtId = oprationItem.First().Id;
-            var lastId = oprationItem.Last().Id;
+            //执行一次排序
+            var firtName = oprationItem.First().Name;
+            //再执行一次排序
+            var lastName = oprationItem.Last().Name;
 
-            Assert.Equal(1, firtId);
-            Assert.Equal(4, lastId);
+            Assert.Equal("张三", firtName);
+            Assert.Equal("王五", lastName);
         }
 
         /// <summary>
@@ -124,7 +122,7 @@ namespace LinqStudy.Test.LinqToObject
 
             var oprationItem = peoples.OrderByDescending(p => p.Id);
 
-            var addItem = new Person() { Id = 4, Name = "赵立", Age = 87 };
+            var addItem = new Person() { Id = 4, Name = "赵六", Age = 87 };
             peoples.Add(addItem);
 
             var firtId = oprationItem.First().Id;
@@ -169,12 +167,12 @@ namespace LinqStudy.Test.LinqToObject
                 new Person(){ Id = 1, Name = "张三", Age=44 },
                 new Person(){ Id = 1, Name = "李四", Age=33 },
                 new Person(){ Id = 2, Name = "王五", Age=22 },
-                new Person(){ Id = 2, Name = "赵立", Age=11 },
+                new Person(){ Id = 2, Name = "赵六", Age=11 },
             };
 
             //先按Id排序,Id相同的,再按年龄排序。
             var oprationItem = peoples.OrderBy(p => p.Id).ThenBy(p => p.Age).Select(p => p.Name);
-            var expected = new List<string>() { "李四", "张三", "赵立", "王五" };
+            var expected = new List<string>() { "李四", "张三", "赵六", "王五" };
 
             Assert.Equal(expected, oprationItem);
         }
@@ -190,16 +188,16 @@ namespace LinqStudy.Test.LinqToObject
                 new Person(){ Id = 1, Name = "张三", Age=44 },
                 new Person(){ Id = 1, Name = "李四", Age=33 },
                 new Person(){ Id = 2, Name = "王五", Age=22 },
-                new Person(){ Id = 2, Name = "赵立", Age=11 },
+                new Person(){ Id = 2, Name = "赵六", Age=11 },
             };
 
             var oprationItem = peoples.OrderBy(p => p.Id).ThenBy(p => p.Age);
-            
+
             var addItme = new Person() { Id = 1, Name = "刘能", Age = 2 };
             peoples.Add(addItme);
 
             var actual = oprationItem.Select(p => p.Name).ToList();
-            var expected = new List<string>() { "刘能", "李四", "张三", "赵立", "王五" };
+            var expected = new List<string>() { "刘能", "李四", "张三", "赵六", "王五" };
 
             Assert.Equal(expected, actual);
         }
@@ -215,13 +213,13 @@ namespace LinqStudy.Test.LinqToObject
                 new Person(){ Id = 1, Name = "张三", Age=44 },
                 new Person(){ Id = 1, Name = "李四", Age=33 },
                 new Person(){ Id = 2, Name = "王五", Age=22 },
-                new Person(){ Id = 2, Name = "赵立", Age=11 },
+                new Person(){ Id = 2, Name = "赵六", Age=11 },
             };
 
-            var oprationItem = peoples.OrderBy(p => p, new PersonComparer()).ThenBy(p=>p.Age,Comparer<int>.Default);
+            var oprationItem = peoples.OrderBy(p => p, new PersonComparer()).ThenBy(p => p.Age, Comparer<int>.Default);
 
             var actual = oprationItem.Select(p => p.Name).ToList();
-            var expected = new List<string>() {"李四", "张三", "赵立", "王五" };
+            var expected = new List<string>() { "李四", "张三", "赵六", "王五" };
 
             Assert.Equal(expected, actual);
         }
@@ -239,12 +237,12 @@ namespace LinqStudy.Test.LinqToObject
                 new Person(){ Id = 1, Name = "张三", Age=44 },
                 new Person(){ Id = 1, Name = "李四", Age=33 },
                 new Person(){ Id = 2, Name = "王五", Age=22 },
-                new Person(){ Id = 2, Name = "赵立", Age=11 },
+                new Person(){ Id = 2, Name = "赵六", Age=11 },
             };
 
             //先按Id排序,Id相同的,再按年龄排序。
             var oprationItem = peoples.OrderBy(p => p.Id).ThenByDescending(p => p.Age).Select(p => p.Name);
-            var expected = new List<string>() {"张三","李四","王五", "赵立"};
+            var expected = new List<string>() { "张三", "李四", "王五", "赵六" };
 
             Assert.Equal(expected, oprationItem);
         }
@@ -260,7 +258,7 @@ namespace LinqStudy.Test.LinqToObject
                 new Person(){ Id = 1, Name = "张三", Age=44 },
                 new Person(){ Id = 1, Name = "李四", Age=33 },
                 new Person(){ Id = 2, Name = "王五", Age=22 },
-                new Person(){ Id = 2, Name = "赵立", Age=11 },
+                new Person(){ Id = 2, Name = "赵六", Age=11 },
             };
 
             var oprationItem = peoples.OrderBy(p => p.Id).ThenByDescending(p => p.Age);
@@ -269,7 +267,7 @@ namespace LinqStudy.Test.LinqToObject
             peoples.Add(addItme);
 
             var actual = oprationItem.Select(p => p.Name).ToList();
-            var expected = new List<string>() { "张三", "李四", "刘能", "王五","赵立" };
+            var expected = new List<string>() { "张三", "李四", "刘能", "王五", "赵六" };
 
             Assert.Equal(expected, actual);
         }
@@ -285,16 +283,85 @@ namespace LinqStudy.Test.LinqToObject
                 new Person(){ Id = 1, Name = "张三", Age=44 },
                 new Person(){ Id = 1, Name = "李四", Age=33 },
                 new Person(){ Id = 2, Name = "王五", Age=22 },
-                new Person(){ Id = 2, Name = "赵立", Age=11 },
+                new Person(){ Id = 2, Name = "赵六", Age=11 },
             };
 
             var oprationItem = peoples.OrderBy(p => p, new PersonComparer()).ThenByDescending(p => p.Age, Comparer<int>.Default);
 
             var actual = oprationItem.Select(p => p.Name).ToList();
-            var expected = new List<string>() { "张三","李四",  "王五", "赵立",};
+            var expected = new List<string>() { "张三", "李四", "王五", "赵六", };
 
             Assert.Equal(expected, actual);
         }
         #endregion
+
+        #region Resevse
+        /// <summary>
+        /// Resevse:反序序列(逆向);立即执行
+        /// </summary>
+        [Fact]
+        public void Resevse_Test()
+        {
+            List<Person> peoples = new List<Person>()
+            {
+                new Person(){ Id = 1, Name = "张三", Age=44 },
+                new Person(){ Id = 2, Name = "李四", Age=33 },
+            };
+
+            //简单逆序
+            peoples.Reverse();
+            var firstId = peoples.First().Id;
+
+            Assert.Equal(2, firstId);
+        }
+
+        /// <summary>
+        /// Resevse:反序序列(逆向);立即执行
+        /// </summary>
+        [Fact]
+        public void Resevse_immediately_Test()
+        {
+            List<Person> peoples = new List<Person>()
+            {
+                new Person(){ Id = 1, Name = "张三", Age=33 },
+                new Person(){ Id = 2, Name = "李四", Age=44 },
+            };
+
+            //简单逆序
+            peoples.Reverse();
+
+            peoples.Add(new Person() { Id = 3, Name = "云花公主", Age = 18 });
+
+            //数据源变化,不影响结果。
+            var firstId = peoples.First().Id;
+
+            Assert.Equal(2, firstId);
+        }
+
+        /// <summary>
+        /// Resevse重载:index开始项,count反序项的数量
+        /// </summary>
+        [Fact]
+        public void Resevse_index_count_Test()
+        {
+            List<Person> peoples = new List<Person>()
+            {
+                new Person(){ Id = 1, Name = "张三", Age=44 },
+                new Person(){ Id = 2, Name = "李四", Age=33 },
+                new Person(){ Id = 3, Name = "王五", Age=44 },
+                new Person(){ Id = 4, Name = "赵六", Age=33 },
+            };
+
+            //从指定位置开始逆序指定数量的项。
+            //从序号为1(第2项)开始,反序2项:即反序第2第3两项。
+            peoples.Reverse(1, 2);
+
+            var secondId = peoples[1].Id;
+            var thirdId = peoples[2].Id;
+
+            Assert.Equal(3, secondId);
+            Assert.Equal(2, thirdId);
+        }
+        #endregion
     }
 }