c# – 使用lambda重新排列List
发布时间:2020-12-15 08:26:02 所属栏目:百科 来源:网络整理
导读:我需要重新排列项目列表,以便所选项目到达列表的末尾,最后一项替换前一项目,前一项目替换之前的项目,依此类推. 例如,如果我有一个包含十个项目的列表,并且所选项目位于第5位,则此项目将转到位置9,而9将替换为8然后8替换7和7替换6和6取代位置5.我设法获得了使
我需要重新排列项目列表,以便所选项目到达列表的末尾,最后一项替换前一项目,前一项目替换之前的项目,依此类推.
例如,如果我有一个包含十个项目的列表,并且所选项目位于第5位,则此项目将转到位置9,而9将替换为8然后8替换7和7替换6和6取代位置5.我设法获得了使用此代码的所需结果: List<int> numList = new List<int>(); int selectedNum = 5;//Selected at runtime for (int i = 0; i < 10; i++) numList.Add(i); int numListCount = numList.Count-1; int tempNum = numList[numListCount]; List<int> tempList = numList.GetRange(selectedNum + 1,(numList.Count-selectedNum) - 2); numList[numListCount] = selectedNum; numList.RemoveRange(selectedNum,(numList.Count-selectedNum)-1); numList.InsertRange(selectedNum,tempList); numList.Insert(numListCount - 1,tempNum); 结果是:
我确定我的代码很丑陋且效率低下:我有两个问题: >是否可以使用Lambda获得相同的结果?如果不是,那么 解决方法
您可以使用
Remove Method删除所选项目,使用
Add Method将其附加到最后:
List<int> numList = new List<int>(); for (int i = 0; i < 10; i++) numList.Add(2 * i); int selectedNum = 6; // selected at runtime numList.Remove(selectedNum); numList.Add(selectedNum); 之前: 0 2 4 6 8 10 12 14 16 18 删除后(6): 0 2 4 8 10 12 14 16 18 添加(6)后: 0 2 4 8 10 12 14 16 18 6 如果要在选定的索引处移动项目,可以使用RemoveAt Method而不是Remove Method: List<int> numList = new List<int>(); for (int i = 0; i < 10; i++) numList.Add(2 * i); int selectedIndex = 5; // selected at runtime int selectedNum = numList[selectedIndex]; numList.RemoveAt(selectedIndex); numList.Add(selectedNum); 之前: 0 2 4 6 8 10 12 14 16 18 在RemoveAt(5)之后: 0 2 4 6 8 12 14 16 18 添加(10)后: 0 2 4 6 8 12 14 16 18 10 使用LINQ,您将创建一个新列表,其中删除并附加所选项.如上所示的就地更新效率更高. List<int> numList = new List<int>(); for (int i = 0; i < 10; i++) numList.Add(2 * i); int selectedIndex = 5; // selected at runtime List<int> newNumList = numList.Take(selectedIndex) .Concat(numList.Skip(selectedIndex + 1)) .Concat(numList.Skip(selectedIndex).Take(1)) .ToList(); numList: 0 2 4 6 8 10 12 14 16 18 newNumList: 0 2 4 6 8 12 14 16 18 10 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- MTK-6235型号以上手机FLASH的划分
- ios – 有没有办法在不使用Apple开发人员门户的情
- EJB 3.0 开发指南之依赖值对象
- Cannot find an initializer for type '[(St
- POCO库中文编程参考指南(11)如何使用Reactor框
- flex 类似于flash的过渡效果 flex 教程 flex培训
- presto-0.147+postgresql-9.5.3+msql-5.0.7+hado
- STM32使用J-Link烧写出错:Error: Flash Downloa
- c# – 反射未找到嵌套类型的受保护字段
- c# – DirectX / SharpDX中的“glReadPixels”之
热点阅读