2014-02-12 4 views
0

У меня есть функция, которая добавляет новое правило цены, каждое правило цены имеет два диапазона (A_Low, A_High) (B_Low, B_High). Когда функции хотят добавить новую цену, необходимо убедиться, что диапазоны не перекрываются, так что каждое введенное значение А и В может соответствовать только одному указанному праву цены. A & B могут быть положительными или отрицательными.Проверка перекрытия числовых значений в списке?

Пример логики:

Правило 1: A_Low = 0,0, A_High = 1,0; B_Low 0,0, B_High = 0,25

Если я пытаюсь добавить следующие правила:

Случай 1: A_Low = 0,5, A_High = 1,5; B_Low 0.26, B_High = 1.0

Вышеприведенный тестовый пример должен быть разрешен, чтобы A мог перекрываться, если B не работает, B может перекрываться, если A нет. У меня возникла проблема, обертывающая мою голову вокруг правильной логики, чтобы оценить и определить, действительно ли правило цены, которое я пытаюсь добавить, ... Я знаю, что есть функции для проверки перекрывающихся дат, есть ли один для перекрывающихся числовых диапазонов?

Я все еще не могу понять, что у меня есть не так, вот мой пример кода:

For Each p In Rules 
     If p.A_Max > A_Min And p.A_Min < A_Max Then 
      If p.B_Max> B_Min And p.B_Min < B_Max Then 
       Return False 
      End If 
     End If 

     If p.B_Max> B_Min And p.B_Min < B_Max Then 
      If p.A_Max > A_Min And p.A_Min < A_Max Then 
       Return False 
      End If 
     End If 
    Next 
    Return True 

ответ

0

Вот то, что может помочь: intervals collection class. Это написано на C#, но кодирование очень прямое и довольно простое. Это должно быть относительно просто адаптироваться к вашим потребностям.

+0

Если вы еще не знакомы с C#, то есть число парсеров кода C# на vb.net или наоборот, которые преобразуют блок кода для вас ... простой Google поиск должен тянуть большое количество из них. – user2366842

0

Это возвращает истину, если есть перекрытие

Rule_High> Case_Low И Rule_Low < Case_High

Вам просто нужно проверить А и В, и если оба перекрываются, то у Вас есть ошибка.

Это также обнаружить перекрытие, если у вас есть что-то вроде этого:

Случай 1: A_Low = 0,5, A_High = 0,7; B_Low -1, B_High = 2

Смежные вопросы