Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Определить какая дата из массива находится ближе всего к введенной дате

Есть массив дат, каждой дате поставлено в соответствие определенное значение параметра. Пользователь вводит дату и надо определить значение параметра, дата которого находится ближе всего к введенной дате. Единственное что приходит в голову это использовать массив кортежей List>, в котором хранить параметр и разницу между датами (датой параметра и введенной датой) и затем отсортировать и взять первое значение. Возможно есть более красивый способ? Спасибо.


Ответ

Как верно заметили, сортировка не нужна. Быстрее будет пробежаться по всем элементам, на ходу вычисляя самый близкий. Ну и не забудьте про приведение дат к UTC, например, если они у вас из разных поясов.
var data = new Dictionary() { { DateTime.Now.AddDays(-2), -2 }, { DateTime.Now.AddDays(-1), -1 }, { DateTime.Now.AddDays(3), 3 }, };
var specifiedDate = DateTime.Now;
var distances = data .Select(p => new { Distance = Math.Abs((specifiedDate - p.Key).Ticks), p.Value });
var distance = long.MaxValue; int closestParameter; foreach (var pair in distances) { if (pair.Distance < distance) { distance = pair.Distance; closestParameter = pair.Value; } }

Комментариев нет:

Отправить комментарий