【问题标题】:Finding all different adjacent ranges matching/covering a specific range in a specific order以特定顺序查找匹配/覆盖特定范围的所有不同相邻范围
【发布时间】:2016-03-30 13:34:29
【问题描述】:

我想找出以特定顺序匹配/覆盖目标范围的所有相邻范围。例如

给定范围是 5-12

来源范围是

1-7

1-13

4-8

4-12

5-7

5-8

5-12

5-13

7-12

8-12

所以结果应该优先如下

1. 5-12 (Exact match)
2. 5-7,7-12 (Two Adjacent ranges match)[Ranges Start And End Exact Match]
2. 5-8,8-12 (Two Adjacent ranges match)[Ranges Start And End Exact Match]
3. 5-13 (Single Covering range)[Range Start Exact Match]
3. 4-12 (Single Covering range)[Range End Exact Match]
3. 4-8,8-12 (Two Adjacent ranges covering)[Range End Exact Match]
3. 1-7,7-12 (Two adjacent ranges covering)[Range End Exact Match]
4. 1-13 (Single Covering range)[No Ranges Start And End Exact Match]

任何帮助都将受到高度重视。

【问题讨论】:

  • 您是在合法使用 .NET 2.0 还是只是您选择的一个标签?答案可能会有所不同
  • 另外,根据您的示例,我很难理解您实际正在寻找的逻辑,如果您可以发布一些您尝试过的代码,那将会很有帮助
  • 啊,好吧,有些人在他们的问题上扔了任何标签,所以我只是检查一下。我重读了几次你的问题,现在明白了你想要什么逻辑,但我仍然认为你应该发布一些你写的代码,以表明你试图提出自己的算法。这不是一个供人们为您工作的网站
  • 其实,我想的算法如下 a) 找到所有相邻的组合 b) 找到覆盖整个目标范围的单个源范围 c) 根据单个精确匹配,相邻的范围对范围进行优先级排序范围开始和结束完全匹配等等。但我很惭愧,我哪儿也不去。只需要存储相邻范围并对其进行处理的方向:(
  • 对不起,这个网站的新手。不知道格式化是如何工作的。不小心发表了不完整的评论。

标签: c# .net-2.0


【解决方案1】:

首先为 Range 创建一个类

class Range{
   public int start;
   public int end;
   public Range(int start, int end){
      this.start=start;
      this.end=end;
   }
   public string toString(){
      return start+"-"+end;
   }
}

创建后,在某处创建此方法。

public static void classifyRanges(Range sourceRange, Range[]ranges){
   foreach(Range range in ranges){
      if(range.start==sourceRange.start && range.end==range.end){
         Console.WriteLine("1."+range.toString()+" (Exact Match)";
      }
   }
   foreach(Range range in ranges){
      if(range.start!=sourceRange.start && range.end!=range.end){
         Console.WriteLine("4."+range.toString()+" (No Match)";
      }
   }
}

其他的还在制定中

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多