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 peoples = new List() { - 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); } /// @@ -46,21 +43,22 @@ namespace LinqStudy.Test.LinqToObject { List peoples = new List() { - 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); } /// @@ -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() { "李四", "张三", "赵立", "王五" }; + var expected = new List() { "李四", "张三", "赵六", "王五" }; 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() { "刘能", "李四", "张三", "赵立", "王五" }; + var expected = new List() { "刘能", "李四", "张三", "赵六", "王五" }; 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.Default); + var oprationItem = peoples.OrderBy(p => p, new PersonComparer()).ThenBy(p => p.Age, Comparer.Default); var actual = oprationItem.Select(p => p.Name).ToList(); - var expected = new List() {"李四", "张三", "赵立", "王五" }; + var expected = new List() { "李四", "张三", "赵六", "王五" }; 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() {"张三","李四","王五", "赵立"}; + var expected = new List() { "张三", "李四", "王五", "赵六" }; 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() { "张三", "李四", "刘能", "王五","赵立" }; + var expected = new List() { "张三", "李四", "刘能", "王五", "赵六" }; 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.Default); var actual = oprationItem.Select(p => p.Name).ToList(); - var expected = new List() { "张三","李四", "王五", "赵立",}; + var expected = new List() { "张三", "李四", "王五", "赵六", }; Assert.Equal(expected, actual); } #endregion + + #region Resevse + /// + /// Resevse:反序序列(逆向);立即执行 + /// + [Fact] + public void Resevse_Test() + { + List peoples = new List() + { + 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); + } + + /// + /// Resevse:反序序列(逆向);立即执行 + /// + [Fact] + public void Resevse_immediately_Test() + { + List peoples = new List() + { + 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); + } + + /// + /// Resevse重载:index开始项,count反序项的数量 + /// + [Fact] + public void Resevse_index_count_Test() + { + List peoples = new List() + { + 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 } }