使用 LINQ 获取上一个和下一个元素

发布于 2024-12-04 16:52:33 字数 681 浏览 5 评论 0原文

我的一位同事正在寻找类似从给定值的列表中选取上一个和下一个值的东西。我在谷歌的帮助下写了一个小函数,它可以工作,但我想看看 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;
    }

谢谢 帕克

One of my colleague was looking for something like picking up previous and next values from a list for a given value. I wrote a little function with some help of Google, which works but I wanted to see
1. if is this an efficient way to do this?
2. Any other way in LINQ to do this?

    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;
    }

thanks
Pak

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

简单爱 2024-12-11 16:52:33

仅仅为了找到一件商品而订购会让我产生怀疑。
您可以通过以下方式在线性时间内完成:

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 };

Ordering just to find a single item would make me suspicious.
You can do it in linear time this way:

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 };
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文