二分查找通过表中的日期信息找到表中的多条数据

最近碰到一个查表的问题.需要通过表中的日期筛选出数据.数据可能是0到n.表中的日期是按照顺序排列的.使用二分查找遇到了只能查到指定项的问题的问题.下面是我的代码实现.

-- function UI_WeatherMain:Binary_Search(_CurDate)
--  if _CurDate ~= 0000 then 
--      local _CureDateNum = tonumber(_CurDate)
--      local _start = 1
--      local _end = #TB_WEATHER_CONFIG
--      while _start <= _end do 
--          local _mid = math.floor( (_start + _end) / 2)
--          if _CureDateNum > TB_WEATHER_CONFIG[_mid].Date then 
--          _start = _mid + 1 
--          elseif _CureDateNum < TB_WEATHER_CONFIG[_mid].Date then 
--              _end = _mid - 1 
--          else 
--              return  TB_WEATHER_CONFIG[_mid]
--          end
--      end
--      return nil
--  end
--  return nil
-- end

通过前辈的思路解决了问题.具体记录如下.

function UI_WeatherMain:BinarySearch(_CurDateNum, _Start, _End)
    local _Mid = math.floor( (_Start + _End) / 2)
    if _CurDateNum > TB_WEATHER_FORECAST[_Mid].Date then 
        self:BinarySearch(_CurDateNum, _Mid, _End)
    elseif _CurDateNum < TB_WEATHER_FORECAST[_Mid].Date then 
        self:BinarySearch(_CurDateNum, _Start, _Mid)
    else 
        if _CurDateNum == TB_WEATHER_FORECAST[_Start].Date then 
            self.Start = _Start 
        else
            _Start = _Start + 1
        end
        if _CurDateNum == TB_WEATHER_FORECAST[_End].Date then 
            self.End = _End 
        else
            _End = _End - 1
        end
        if self.Start ~= _Start or self.End ~= _End then 
            self:BinarySearch(_CurDateNum, _Start, _End)
        end
    end
end

这样可以找到数据的开始点和结束点.中间的数据就是我需要的.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容