sve*_*vit 6 c# linq range sequence
假设我们有这样的数据结构:
var sequences = new List<Tuple<int, int>>
{
new Tuple<int, int>(1, 10),
new Tuple<int, int>(8, 101),
new Tuple<int, int>(102, 103),
new Tuple<int, int>(104, 104),
new Tuple<int, int>(110, 200)
};
Run Code Online (Sandbox Code Playgroud)
我想从这个集合中得到两个结果:
我可以编写一个带有几个循环和辅助集合的算法.这个过程是可行的,但我想知道这是否可以在LINQ和/或其他更简单和更短的算法的帮助下实现?
编辑:我上面例子的数据结构代表5个序列,第一个包含从1到10的数字,第二个包含从8到101的数字等等...因为在生产中序列可以更大(高达数百万),它们不用实际集合表示(例如带有所有数字的列表),而是用元组表示,它代表每个序列的最小和最大数量.
您可以通过
var missing =
Enumerable.Range(1, 200)
.Where(i => sequences.All(t => t.Item1 > i || t.Item2 < i));
var overlapping =
Enumerable.Range(1, 200)
.Where(i => sequences.Count(t => t.Item1 <= i && t.Item2 >= i) > 1);
Run Code Online (Sandbox Code Playgroud)