Как найти предыдущую и следующую строки из списка (двойной, строка) с учетом двойного значения?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как найти предыдущую и следующую строки из списка (двойной, строка) с учетом двойного значения?

Сообщение Anonymous »

Имеется список (двойных значений, строковых значений и логических флагов). Я хотел бы создать функцию, которая принимает двойное значение и заданный список и возвращает 2 значения, ближайшие к этому двойному значению (по обе стороны от него), где флаг имеет значение true.
Это, вероятно, лучше всего показано на примере кода. Я решил не использовать модели, чтобы избежать вставки большого количества кода.
Всегда необходимо возвращать либо первые 2, либо последние 2, если заданное двойное значение находится за пределами диапазона, поэтому оно никогда не должен давать сбоев.
[TestMethod]
public void FindNearestDoubles_GivenDouble_ShouldReturnNearestValue()
{
var listOfDoubleValues = new List
{
(1, "test1", true),
(3, "test2", true),
(5, "test3", true),
(9, "test4", false),
(78, "test5", true)
};

var testDataWithExpectedValues = new List
{
(1, "test1", "test2"),
(2, "test1", "test2"),
(3, "test1", "test3"),
(6, "test3", "test5"),
(-50, "test1", "test2"),
(77, "test3", "test5"),
(800, "test3", "test5"),
};

testDataWithExpectedValues.ForEach(_ =>
{
var closetValues = FindClosestValues(_.value, listOfDoubleValues);
Assert.AreEqual(_.expectedPrevValue, closetValues.prevValue);
Assert.AreEqual(_.expectedNextValue, closetValues.nextValue);

});
}

// does not currently work
private (string prevValue, string nextValue) FindClosestValues(double valueToFind, IList values)
{
string prevValue = values.First().value;
string nextValue = values.Last().value;

foreach (var value in values.Where(_ => _.flag == true))
{
if (valueToFind > value.time)
prevValue = values.Single(_ => _.time == valueToFind).value;

if (valueToFind < value.time)
nextValue = values.Single(_ => _.time == valueToFind).value;
}

return (prevValue, nextValue);
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... -given-a-d
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»