Как проверить, сколько значений находится в диапазоне определенного значения, используя C#? - PullRequest
0 голосов
/ 29 апреля 2020

Допустим, у меня есть следующие списки начального и конечного диапазонов:

3 30
5 20
7 25
8 28
9 40

3 30, например, представляет от 3 до 30. Как проверить, сколько других значений, таких как От 5 до 20, в 3 30 и считать их? Таким образом, для 3 30 в его диапазоне будет 4 других значения: от 5 до 20, от 7 до 25, от 8 до 28 и от 9 до 40.

1 Ответ

0 голосов
/ 29 апреля 2020

Предполагая, что у вас есть класс Range, подобный этому:

public class Range
{
    public int Min { get; set; }
    public int Max { get; set; }

    public Range(int min, int max)
    {
        this.Min = min;
        this.Max = max;
    }

    public bool InRange(Range range)
    {
        //only check if range.Min because you said that the Range 3 30 should return positiv for 9 40
        return range.Min >= this.Min && range.Min <= this.Max;

        //use this if you want both Min and Max to be "InRange"
        //return range.Min >= this.Min && range.Max <= this.Max;
    }
}

Вы можете сделать это:

public static IEnumerable<Range> GetRanges(Range range, IEnumerable<Range> ranges)
{
    return ranges.Where(x => range.InRange(x));
}

Чтобы получить Count, просто вызовите метод GetRanges и вызовите Count на результат, например.

public static int GetCount(Range range, IEnumerable<Range> ranges)
{
    return GetRanges(range, ranges).Count();
}

См. В действии:

https://dotnetfiddle.net/qEUBjK

...