обычный цикл должен быть в порядке:
IEnumerable<double> keys = ...; //ordered sequence of keys
double interpolatedKey = ...;
// I'm considering here that keys collection doesn't contain interpolatedKey
double? lowerFoundKey = null;
double? upperFoundKey = null;
foreach (double key in keys)
{
if (key > interpolatedKey)
{
upperFoundKey = key;
break;
}
else
lowerFoundKey = key;
}
Вы можете сделать это в C # с помощью LINQ с более коротким, но менее эффективным кодом:
double lowerFoundKey = key.LastOrDefault(k => k < interpolatedKey);
double upperFoundKey = key.FirstOrDefault(k => k > interpolatedKey);
Для того, чтобы сделать это эффективно с LINQу него должен быть метод, который называется оконным в F # с параметром 2. Он вернет IEnumerable
соседних пар в коллекции keys
.Хотя эта функция отсутствует в LINQ, обычный цикл foreach
должен быть в порядке.