c#:存储一组不重叠的范围,并严格查找一个值是否存在于任何一个范围中



我有一组范围:

Range1 ---- (0-10)

Range2 ---- (15-25)

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

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

我需要一个函数

bool搜索(range, searchvalue){如果搜索值存在于任何范围中返回true;其他的返回错误;}怎样才能做到最好呢?这是严格不重叠的,重要的标准是搜索必须是最有效的。

有一个类似的问题,我问考虑到c++,我们可以使用map或vector,但如何在c#上最好地完成它?

你可以定义一个类范围并对其进行二分搜索:最好在启动时保持列表排序,或者使用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 });
    }

最新更新