我的一位同事正在寻找类似于从列表中获取给定值的上一个和下一个值的内容。我在谷歌的帮助下写了一个小功能,但是我想看看 1.这是否是一种有效的方法? 2.在LINQ中执行此操作的任何其他方式?
private static List<double> GetHighLow(double value)
{
List<double> tenorList = new List<double> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 15, 20, 30 };
double previous = tenorList.OrderByDescending(s => s).Where(s => s.CompareTo(value) < 0).FirstOrDefault();
double next = tenorList.OrderBy(s => s).Where(s => s.CompareTo(value) > 0).FirstOrDefault();
List<double> values = new List<double> { previous, next };
return values;
}
感谢 Pak
答案 0 :(得分:3)
订购只是为了找到一件物品会让我产生怀疑。 你可以用线性时间这样做:
double prev = double.MinValue;
double nx = double.MaxValue;
foreach (var item in tenorList) {
if (item < value && item > prev) { prev = item; }
if (item > value && item < nx) { nx = item; }
}
List<double> values = new List<double> { prev, nx };