Dan*_*ams 5 c# linq linq-to-objects
说我有一个整数列表:
List<int> myInts = new List<int>() {1,2,3,5,8,13,21};
Run Code Online (Sandbox Code Playgroud)
我想得到下一个可用的整数,按增加整数排序.不是最后一个或最高的,但在这种情况下,下一个不在此列表中的整数.在这种情况下,数字是4.
是否有一个LINQ语句会给我这个?如:
var nextAvailable = myInts.SomeCoolLinqMethod();
Run Code Online (Sandbox Code Playgroud)
编辑:废话.我说答案应该是2,但我的意思是4.我为此道歉!
例如:想象一下,您负责分发流程ID.您想获取当前进程ID的列表,并发出下一个进程ID,但下一个进程ID不应该只是最高值加1.相反,它应该是从有序的进程ID列表中可用的下一个.你可以从最高的开始获得下一个可用的,它并不重要.
Eli*_*ing 28
我看到很多编写自定义扩展方法的答案,但是可以使用标准的linq扩展方法和静态Enumerable类来解决这个问题:
List<int> myInts = new List<int>() {1,2,3,5,8,13,21};
// This will set firstAvailable to 4.
int firstAvailable = Enumerable.Range(1, Int32.MaxValue).Except(myInts).First();
Run Code Online (Sandbox Code Playgroud)
public static class IntExtensions
{
public static int? SomeCoolLinqMethod(this IEnumerable<int> ints)
{
int counter = ints.Count() > 0 ? ints.First() : -1;
while (counter < int.MaxValue)
{
if (!ints.Contains(++counter)) return counter;
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
var nextAvailable = myInts.SomeCoolLinqMethod();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6075 次 |
| 最近记录: |