如何返回所有其他范围C#列表中未包含的所有范围

时间:2018-07-05 07:35:20

标签: c# arrays linq subset

我有一个值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()方法删除这些对,但是我对这样做的方法感到困惑。

任何帮助将不胜感激。

2 个答案:

答案 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的情况下,这当然可以更快地完成,这取决于对应用程序而言内存和性能的重要性。