c# – 确定整数列表中的第一个可用值
发布时间:2020-12-15 06:26:46 所属栏目:百科 来源:网络整理
导读:我有一个简单的ints列表. Listint myInts = new Listint();myInts.Add(0);myInts.Add(1);myInts.Add(4);myInts.Add(6);myInts.Add(24); 我的目标是从列表中获取第一个未使用的(可用的)值. (集合中尚未存在的第一个正值) 在这种情况下,答案是2. 这是我现在的
我有一个简单的ints列表.
List<int> myInts = new List<int>(); myInts.Add(0); myInts.Add(1); myInts.Add(4); myInts.Add(6); myInts.Add(24); 我的目标是从列表中获取第一个未使用的(可用的)值. (集合中尚未存在的第一个正值) 在这种情况下,答案是2. 这是我现在的代码: int GetFirstFreeInt() { for (int i = 0; i < int.MaxValue; ++i) { if(!myInts.Contains(i)) return i; } throw new InvalidOperationException("All integers are already used."); } 有没有更好的办法?也许使用LINQ?你会如何做到这一点 当然这里我用简单的内容,但我的问题可以适用于任何类型. 解决方法
您基本上希望myInts中不包含序列0..int.MaxValue中的第一个元素:
int? firstAvailable = Enumerable.Range(0,int.MaxValue) .Except(myInts) .FirstOrDefault(); 编辑响应评论: 这里没有性能惩罚迭代到int.MaxValue. Linq将在内部创建一个hasInts的哈希表,然后开始迭代由Enumerable.Range()创建的序列 – 一旦没有包含在哈希表中的第一个项目被发现该除数()方法得到整数,由FirstOrDefault()返回 – 之后迭代停止.这意味着整体努力是用于创建散列表的O(n),然后是用于迭代序列的最坏情况O(n),其中n是myInt中的整数数. 关于Except()的更多信息,请参见Jon Skeet的EduLinq系列:Reimplementing LINQ to Objects: Part 17 – Except (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- Cocos2d-x 3.x中Draw calls与ZOrder和纹理材质的
- iphone – 以编程方式向视图添加多个按钮,调用相
- Linux 自动备份oracle数据库详解
- ruby-on-rails – ActiveRecord Association选择
- ruby-on-rails – Ruby / Rails性能:OpenURI vs
- UML关系(泛化,实现,依赖,关联(聚合,组合))
- c – 何时在函数中使用const引用而不是const值?
- 深入解析Radix Sort基数排序算法思想及C语言实现
- C:是否有可能从一个重载<<运算符的对象中获取一
- Selenium+Java - 结合sikuliX操作Flash网页
热点阅读