我有一个值Tuple
的列表,如下所示:
List<(int, int)> values = new List<(int, int)>
{
(12, 15),
(18, 30),
(18, 27),
(27, 30)
};
现在我要删除此列表中的对,该对在更广泛的对的范围之内。
例如:(18, 27)
和(27, 30)
在(18, 30)
的范围内。因此,我想删除其下的那些对。
因此最终输出必须为:
(12, 15)
(18, 30)
我当时在考虑使用LINQ的.RemoveAll()
方法删除这些对,但是我对这样做的方法感到困惑。
任何帮助将不胜感激。
答案 0 :(得分:2)
如果我理解正确,这将解决问题。它将列表的每个值与整个列表进行比较,直到找到另一个不完全相等的元组。
List<(int, int)> values = new List<(int, int)>
{
(12, 15),
(18, 30),
(18, 27),
(27, 30)
};
values.RemoveAll(x => values.Any(y => x.CompareTo(y) != 0 && x.Item1 >= y.Item1 && x.Item2 <= y.Item2));
答案 1 :(得分:1)
我认为这应该可行,并且应该为n * log(n):
(+)
在没有Linq的情况下,这当然可以更快地完成,这取决于对应用程序而言内存和性能的重要性。