c#如何查询数字集合中最接近的项目的索引

by_封爱 2015-07-21 11:26:50
代码如下 手写可能有错.

list<double> list=new list<double>();
list.add(0.0158);
list.add(0.0238);
list.add(0.0315);
list.add(0.0446);

有一个数组如上 里面的项是一直增长的 并且4位小数一直增加(实际上2s增加一次) 数字来自

//stTime表示刚执行的时间...
Math.Round((DateTime.Now - stTime).TotalSeconds / 60, 4);


背景交代完了..现在说下需求.

在某一时刻 我有一个数字 也是4位小数 要求通过集合找到所在的索引 那么 我直接FindIndex(d=>d==0.0238)即可

但是这个数字跟上面的对不上.所以我要求找最近的

比如参数是0.0447 那么返回3
比如参数是0.0222 那么返回1

当然我循环是可以的,最好用什么LINQ的方式 一句话搞定才好,有点偏差无所谓(上下相等就随便取哪个都可以)
...全文
1709 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
应该是你的比较高吧,因为你的不需要进过中间步骤
by_封爱 2015-07-21
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
static int TestIndex(double num)
{
    List<double> list = new List<double>();
    list.Add(0.0158);
    list.Add(0.0238);
    list.Add(0.0315);
    list.Add(0.0446);
    return list.Select((d, i) =>
    {
        return new
        {
            Value = d,
            Index = i
        };
    }).OrderBy(x => Math.Abs(x.Value - num)).First().Index;
}
很屌了...没想到 因为我的这个东西是允许有一点偏差 所以我用了

list.FindLastIndex(d => d<= num);
也就是 取>集合中最小 或者<集合中最大的. 但是处女座最求完美,我这个list可能很多数据(2s add一次 要执行1个月 30*60*24*30=1296000) 130W数据 所以我这个方法虽然有一个点的误差,但是效率是不是要高一些?因为这个操作关系到UI.当然是越快越好..
  • 打赏
  • 举报
回复
static int TestIndex(double num)
{
    List<double> list = new List<double>();
    list.Add(0.0158);
    list.Add(0.0238);
    list.Add(0.0315);
    list.Add(0.0446);
    return list.Select((d, i) =>
    {
        return new
        {
            Value = d,
            Index = i
        };
    }).OrderBy(x => Math.Abs(x.Value - num)).First().Index;
}

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧