从列表中获取优先项并将其插入到给定位置c#的同一列表中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从列表中获取优先项并将其插入到给定位置c#的同一列表中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1433字,纯文字阅读大概需要3分钟。
内容图文
![从列表中获取优先项并将其插入到给定位置c#的同一列表中](/upload/InfoBanner/zyjiaocheng/687/44a51594b9424a63bb1385ef3c9a0e11.jpg)
我列出了50个排序项目(例如),其中几个项目是优先项目(假设它们的标志设置为1).
默认情况下,我必须首先显示最新的项目(基于日期),但是优先级项目应该出现在一些“ x”记录之后.像下面
索引0:项目
索引1:项目
索引2:优先项(从此位置插入优先项)
索引3:优先事项
索引4:优先事项
索引5:项目
索引6:项目
预定义了插入优先项的索引“ x”.
为此,我正在使用以下代码
这是我的50个排序项目
var list= getMyTop50SortedItems();
提取所有优先项并将其存储在另一个列表中
var priorityItems = list.Where(x => x.flag == 1).ToList();
从主列表中筛选出优先项
list.RemoveAll(x => z.flag == 1);
在给定位置的主列表中插入优先项
list.InsertRange(1, priorityRecords);
这个过程正确地完成了工作,并给了我预期的结果.但是不确定是正确的方法还是有更好的方法(考虑性能)?
请提供您的建议.
另外,考虑到记录数从50增加到100000(任意数量),我执行许多操作(筛选,删除,插入)时性能如何受到影响.
更新:如何使用IQueryable减少列表上的操作数量.
解决方法:
根据InsertRange上的文档:
This method is an O(n * m) operation, where n is the number of
elements to be added and m is Count.
n * m不太好,因此我将使用LINQ的Concat方法从三个较小的列表中创建一个全新的列表,而不是修改现有列表.
var allItems = getMyTop50();
var topPriorityItems = list.Where(x => x.flag == 1).ToList();
var topNonPriorityItems = list.Where(x => x.flag != 1).ToList();
var result = topNonPriorityItems
.Take(constant)
.Concat(topPriorityItems)
.Concat(topNonPriorityItems.Skip(constant));
我不确定List< T>的Concat,Skip和Take方法有多快虽然,但是我敢打赌它们并不比O(n)慢.
内容总结
以上是互联网集市为您收集整理的从列表中获取优先项并将其插入到给定位置c#的同一列表中全部内容,希望文章能够帮你解决从列表中获取优先项并将其插入到给定位置c#的同一列表中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。