【问题标题】:C# : Storing set of non-overlapping ranges and finding whether a value is present in any one of the ranges strictlyC#:存储一组不重叠的范围并严格查找值是否存在于任何一个范围中
【发布时间】:2011-12-25 16:22:46
【问题描述】:

我有一组范围:

范围1 ---- (0-10)

范围2 ---- (15-25)

Range3 ---- (100-1000) 等等。我想只存储边界,因为存储大范围,这将是有效的。

现在我需要搜索一个数字,比如 14 。在这种情况下,14 不存在于任何范围中,而(例如数字)16 存在于其中一个范围中。

我需要一个函数

布尔搜索(范围,搜索值) { 如果搜索值出现在任何范围内 返回真; 别的 返回假; } 怎样才能做到最好?这是严格不重叠的,重要的标准是搜索必须是最有效的。

考虑到 C++ 中我们可以在哪里使用 map 或 vector,我问了一个类似的问题,但是如何在 C# 上最好地完成呢?

【问题讨论】:

    标签: .net search c#-4.0 range


    【解决方案1】:

    您可以定义一个类范围并对其进行二分搜索: 最好在启动时保持列表排序或使用 sortedlist

        public class Range : IComparable
        {
            public int start;
            public int end;
            public int CompareTo(object obj)
            {
                var result = obj as Range;
                if (result == null)
                    return 1;
                if (start > result.start)
                    return 1;
                if (result.start >= start && result.end <= end)
                    return 0;
                return -1;
            }
        }
        public void findItemInRange(List<Range> ranges, int item)
        {
            // ranges.Sort(); I'll assume list is sorted
            int positionOfItem = ranges.
                                BinarySearch(new Range { start = item, end = item });
        }
    

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多