タプルのリストがあります。各タプルは最小値と最大値です。c#+タプルのリストの空白とオーバーラップを確認する
範囲のいずれかが欠落しているか、重複しているかどうかは、提供されたリストで確認したいと思います。
これは定義です。
List<Tuple<int, int>> sequences = new List<Tuple<int, int>>();
例:この場合
minrange = 1;
maxrange = 2097152;
sequences.Add(new Tuple<int, int>(1, 10));
sequences.Add(new Tuple<int, int>(11, 20));
sequences.Add(new Tuple<int, int>(21, 2097152));
私のvarギャップは数を返します。シーケンスの値がある場合
1. sequences.Add(new Tuple<int, int>(1, 10));
sequences.Add(new Tuple<int, int>(11, 20));
This is fine
2. sequences.Add(new Tuple<int, int>(1, 10));
sequences.Add(new Tuple<int, int>(13, 20));
This there are gaps in the sequence
3. sequences.Add(new Tuple<int, int>(1, 10));
sequences.Add(new Tuple<int, int>(10, 20));
This is an overlapping scenario
は現在、私は
int minrange = 1;
int maxrange = 20;
var gaps = Enumerable.Range(minrange, maxrange).Where(i => sequences.All(t => t.Item1 > i || t.Item2 < i));
var overlapping = Enumerable.Range(minrange, maxrange).Where(i => sequences.Count(t => t.Item1 <= i && t.Item2 >= i) > 1);
をしていますそれは避けるべきではないeギャップがないか重複しない有効範囲です
- これは正しい方法ですか?
- 私は間違っていますか?
*ギャップ/オーバーラップがあるかどうかを知る必要がありますか、またはその数を*カウントする必要がありますか? –
必要に応じて、http://en.wikipedia.org/wiki/Interval_treeなどのデータ構造が役立つ場合があります。 –
@Nate:それはまさに私がコードで達成しようとしていることです:) – Vivek