c# - 从 c# 2.0 中的一系列值中获取不同值的高效逻辑

标签 c#

我有一个范围列表。每个范围都有一个从和到值,这意味着该值可以在该范围之间。例如,如果范围是 (1,4),则值可以是 1、2、3 和 4。现在,我需要在给定的范围列表中找到不同的值。下面是示例代码。

class Program
{
    static void Main(string[] args)
    {
        List<Range> values = new List<Range>();
        values.Add(new Range(1, 2));
        values.Add(new Range(1, 3));
        values.Add(new Range(1, 4));
        values.Add(new Range(3, 5));
        values.Add(new Range(7, 10));
        values.Add(new Range(7, 8));

        // Expected Output from the range of values
        //1,2,3,4,5,7,8,9,10
    }
}
class Range
{
    public Range(int _form, int _to)
    {
        from = _from;
        to = _to;
    }
    private int from;

    public int From
    {
        get { return from; }
        set { from = value; }
    }

    private int to;

    public int To
    {
        get { return to; }
        set { to = value; }
    }

}

我可以遍历每个范围并找到不同的值。但如果有人能提供一种有效的方法,那将会很有帮助。

最佳答案

  • 对于少量间隔,直接的方法应该可以解决问题。
  • 如果大多数区间相互折叠,您可以执行合并它们的初步步骤以减少测试数量
  • 如果不相交的区间数量很多,构建一个 Interval Tree .这是一个link到一篇带有 Java 代码示例的文章。

关于c# - 从 c# 2.0 中的一系列值中获取不同值的高效逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11866705/

相关文章:

c# - 模型类型的强类型 ASP.NET Controller.View() 方法

c# 合并字节数组并转换为 16 位整数

c# - c# 接口(interface)中的新词

c# - WPF MVVM 绑定(bind)相关源

c# - 将 System.Type 转换为 T 参数

c# - 如何使 Nunit 测试仅在 Linux 操作系统上运行(而不在 Windows 上运行)?

c# - UWP 无法激活 Windows 应用商店应用程序错误 : the app didn't start

c# - web.config 中的 requestvalidationmode ="2.0"validaterequest ="false"不起作用

c# - 从 SQL Server 数据库读取十进制

c# - 如何将 "BDC Wildcard Filter"添加到 ReadList 方法