DateTimerInterval и Interval

  • Мы были бы рады видеть вас на нашем многоцелевом Discord сервере, где вы можете провести время за занятными общениями и, возможно, найти людей с общими интересами. Заходите, мы всегда вам рады. Приглашение на наш сервер: https://discord.gg/kEdafXB
  • Рекомендуем посетить сайт студии TechGate для получения большей информации о дополнениях под XenForo 2.1 и обновление имеющихся на нашем сайте.

Spark108

Мастер
Команда форума
Администратор
TGS Team
12 Окт 2017
136
65
123
vk.com
#1
C#:
   public class Interval
   {
       public double Min { get; set; }
       public double Max { get; set; }

       public Interval(double min, double max)
       {
           Min = min;
           Max = max;
       }

       /// <summary>
       /// Проверяет вхождение числа в интевал.
       /// </summary>
       /// <param name="val"></param>
       /// <returns></returns>
       public bool Has(double val)
       {
           return Min <= val && Max >= val;
       }

       /// <summary>
       /// Возвращает случайное число из интервала.
       /// </summary>
       /// <returns></returns>
       public double Random()
       {
           var rnd = new Random(DateTime.Now.Second);

           var iRnd = rnd.Next((int)Min, (int)Max);
           var dRnd = iRnd + rnd.NextDouble();

           return Has(dRnd) ? dRnd : iRnd;
       }

       /// <summary>
       /// Выполняет сравнивание перечня диапазона с указанным числом и возвращает первый совпавший ключ.
       /// </summary>
       /// <param name="dictionary">Словарь диапазонов.</param>
       /// <param name="has">Проверяемое число.</param>
       /// <returns>Первое совпадения из словоря.</returns>
       public static string DictionaryHas(Dictionary<string, double[]> dictionary, double has)
       {
           foreach (var kvp in dictionary)
           {
               for (var i = 0; i < kvp.Value.Length; i++)
               {
                   var j = i + 1;
                   if (kvp.Value.Length <= j) continue;

                   if (new Interval(kvp.Value[i], kvp.Value[j]).Has(has))
                   {
                       return kvp.Key;
                   }

                   i++;
               }
           }

           return "";
       }

       /// <summary>
       /// Выполняет сравнивание перечня диапазона с указанным числом и возвращает все совпавшие ключи.
       /// </summary>
       /// <param name="dictionary">Словарь диапазонов.</param>
       /// <param name="has">Проверяемое число.</param>
       /// <returns>Все совпадения из словаря.</returns>
       public static string[] DictionaryHasMany(Dictionary<string, double[]> dictionary, double has)
       {
           List<string> many = new();

           foreach (var kvp in dictionary)
           {
               for (var i = 0; i < kvp.Value.Length; i++)
               {
                   var j = i + 1;
                   if (kvp.Value.Length >= j) continue;

                   if (new Interval(kvp.Value[i], kvp.Value[j]).Has(has))
                   {
                       many.Add(kvp.Key);
                   }

                   i++;
               }
           }

           return many.ToArray();
       }
   }
C++:
public class DateTimeInterval
{
    /// <summary>
    /// Экземпляр <see cref="DateTime"/> начала периода.
    /// </summary>
    public DateTime Start { get; set; }

    /// <summary>
    /// Экземпляр <see cref="DateTime"/> окончания периода.
    /// </summary>
    public DateTime End { get; set; }

    public DateTimeInterval(DateTime start, DateTime end)
    {
        Start = start;
        End = end;
    }

    /// <summary>
    /// Количество дней в интервале.
    /// </summary>
    public long Days => (End - Start).Days;

    /// <summary>
    /// Находится ли эксземпляр <see cref="DateTime"/> в границах периода.
    /// </summary>
    /// <param name="dateTime"></param>
    /// <returns></returns>
    public bool Has(DateTime dateTime)
    {
        return Start <= dateTime && End >= dateTime;
    }
}
Пост автоматически объеденен:

Код не сложной, просто позволяет работать с интервалами даты и чисел. Делал лишь то, что мне нужно было, но можно расширить или объединить вообще.
 

Сейчас просматривают: Никто не смотрит!