@freshlemon

Как проверить вхождение диапазона в диапазон?

Сломал голову, не могу собрать нужный набор проверяемых условий

Из примера имеются диапазоны тоннажа.

Например, уже есть несколько диапазонов:
0-2
5,01-7
7,01-9

2,01-5 Должно пройти проверку
11-13 Пройдет
1-3 Не пройдет
3-10 Не пройдет

Есть такое, но оно много пропускает не нужного
bool checker = true;
                for (int i = 0; i < t_stoimostDataGridView.RowCount; i++) //Перебор по всем диапазонам
                {
                    if (Convert.ToDouble(addMin_TB.Text) > Convert.ToDouble(t_stoimostDataGridView.Rows[i].Cells[1].Value) && Convert.ToDouble(addMax_TB.Text) < Convert.ToDouble(t_stoimostDataGridView.Rows[i].Cells[2].Value))
// if ( текущий min > проверяемый min && текущий max < проверяемый max)
                    {
                        checker = false;
                    }
                }
  • Вопрос задан
  • 900 просмотров
Решения вопроса 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
class Program
    {
        private static readonly Range[] ExistedRanges = {
            new Range(0, 2),
            new Range(5.01f, 7),
            new Range(7.01f, 9)
        };

        public static bool IsValidRange(Range range)
        {
            return !ExistedRanges.Any(o => o.IsCross(range));
        }

        static void Main()
        {
            Console.WriteLine(IsValidRange(new Range(2.01f, 5)));
            Console.WriteLine(IsValidRange(new Range(11, 13)));
            Console.WriteLine(IsValidRange(new Range(1, 3)));
            Console.WriteLine(IsValidRange(new Range(3, 10)));

            Console.ReadKey();
        }
    }

    public struct Range
    {
        public readonly float Start;
        public readonly float End;

        public Range(float start, float end)
        {
            Start = start;
            End = end;
        }

        public bool IsCross(Range other)
        {
            return Math.Min(Math.Max(Start, End), Math.Max(other.Start, other.End)) >=
                   Math.Max(Math.Min(Start, End), Math.Min(other.Start, other.End));
        }
    }


Алгоритм проверки пересечения не мой. Взял когда-то с просторов интернета. Но не помню где взял и как он называется. Если кто-то знает, напишите в комментах.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы