代码之家  ›  专栏  ›  技术社区  ›  CodingInsomnia

从内存中的数据集进行筛选和查找

  •  3
  • CodingInsomnia  · 技术社区  · 14 年前

    我在内存中有几个中等大小的数据集,我需要能够快速筛选和查找信息。这些数据集足够小,我不想每次需要一个条目时都去数据库,但是足够大,我真的需要以某种方式索引数据。

    目前,我正在将POCO对象与一个或多个字典一起用于索引。当我需要通过一个特定的键来找到某个东西时,这个方法非常有效,但有时情况并非如此。例如,我经常需要在特定的日期时间范围内找到一个条目。有时我需要最低价格的条目。大多数情况下,查询会同时查看几个简单的键和一个或两个其他字段。

    是否有任何工具、产品、库(针对.NET框架)可以帮助我实现这一点?还是我需要拿起那本尘土飞扬的旧算法书,开始看搜索树?

    一个例子:

    旅行

    • 部门代码
    • 目的地代码
    • 酒店代码
    • 房间代码
    • 日期
    • 价格

    我需要查询类似于“让我在2010-03-09和2010-03-12之间享受最便宜的旅行,其中departurecode=lax destinationcode=nyc”

    2 回复  |  直到 14 年前
        1
  •  2
  •   Jon Skeet    14 年前

    “最低价格”和“特定日期/时间范围”都可以使用排序集合和二进制搜索来处理。 SortedList / SortedDictionary (或) SortedSet 如果您使用.NET 4.0),那么可能只需做少量的工作,就可以完成您需要的所有工作。

        2
  •  0
  •   Seth Moore    14 年前

    dataset.table(“yourtable”)怎么样? .Select() 方法?

    Dim myRows() as DataRow = myDataSet.Tables("myTable").Select("Date>" & _
        myBeginDate & "AND Date<" & myEndDate)
    

    编辑: MSDN

    数据视图构造

    数据视图为 基础数据表中的数据 同时创建数据视图,以及 排序、行筛选器或行状态筛选器 属性被修改。创建时 数据视图对象,使用数据视图 排序的构造函数, rowfilter和rowstatefilter值 作为构造函数参数(连同 基础数据表)。结果 索引是否生成一次。创建 “空”数据视图并设置 排序、行筛选器或行状态筛选器 之后的属性会导致 正在生成索引至少两次。

    因此,如果您想要为数据集建立索引,那么数据视图似乎可以为您提供索引。