确定范围重叠,包括小于和大于范围

时间:2018-03-06 13:01:28

标签: c# wpf linq math range

我有一个整数范围列表。 当我创建一个新范围(x-y)时,如何检查列表(使用LINQ或其他方式)并确定新创建的范围是否满足要插入列表的条件:

  • 如果新项目与任何现有项目重叠,则无法插入该项目
  • 如果新项目的x小于任何项目
  • ,则可以插入新项目
  • 如果新项目的x大于任何项目,则可以插入新项目

           <----O---->
      <--------->
               ^ NOT OK
    
           <----O---->
                <--------->
               ^ NOT OK
    
           <----O---->
               <-->
               ^ OK
    
           <----O---->
         <-------------->
               ^ OK
           <----O---->
     <--->
               ^ OK
           <----O---->
                        <--->
               ^ OK
    

如果唯一的规则是项目永远不会重叠(但可以是相同的限制)

,我就可以使用它
if (List.Any(listItem => listItem.X <= newItem.Y && listItem.Y >= newItem.X)) return false;

当我需要检查其他两个条件时,问题就会出现。 这甚至可能吗?谢谢!

编辑:
该解决方案类似于Apoorva Jhanwer的答案,方法TrueForAll帮助了我。

if (newList.TrueForAll(listItem => 
    newItem.X < listItem.X && newItem.Y > listItem.Y 
    || newItem.X > listItem.X && newItem.Y < listItem.Y 
    || newItem.X < listItem.X && newItem.Y < listItem.X 
    || newItem.X > listItem.Y && newItem.Y > listItem.Y )) return true;

1 个答案:

答案 0 :(得分:1)

   if (list.TrueForAll(listItem => (newItem.X < listItem.X && newItem.Y > listItem.Y )||(newItem.X > listItem.X && newItem.Y < listItem.Y)))return true;

检查条件是否正确