I Have a Tuple list and I want to find overlaps:
static bool Overlap(params Tuple<int, int>[] ranges) {
for (int i = 0; i < ranges.Length; i++) {
if (i + 1 < ranges.Length) {
if (!(ranges[i].Item1 < ranges[i].Item2
&& ranges[i + 1].Item1 > ranges[i].Item2)) {
return true;
}
}
}
return false;
}
How can I transform this into linq? How can I find if exists gaps with linq, too?
With the power of ReSharper i present to you:
return ranges.Where((t, i) => i + 1 < ranges.Length
&& !(t.Item1 < t.Item2 && ranges[i + 1].Item1 > t.Item2)).Any();
To find out if gaps exist or not you need to check whether the next elements start value is above your current elements end value. So just change >
to <=
.
return ranges.Where((t, i) => i + 1 < ranges.Length
&& !(t.Item1 < t.Item2 && ranges[i + 1].Item1 <= t.Item2)).Any();