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

有效插入/查询任意属性的良好数据结构

  •  6
  • Juliet  · 技术社区  · 16 年前

    • customer.Find(x => x.Name == name)
    • 需要具有特定唯一id的客户吗? customer.Find(x => x.Id == id)
    • 需要特定类型和年龄的客户吗? customer.Find(x => x is PreferredCustomer && x.Age >= age)
    • customer.Find(x => x.Name == name && x.Age == age)

    在几乎所有情况下,查找的标准都有明确的定义。例如,我们只按一个或多个属性Id、Type、Name或Age搜索客户。我们很少用别的东西搜索。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Reed Copsey    16 年前

    对于内存,您有几个选项。

    大多数选项都是O(n)。也就是说,字典查找可以接近O(1)。

    一种方法是将您的客户存储在多个字典中,每个字典都有一个设置为姓名、Id和年龄的键。如果在字典中使用相同的对象引用,则可以进行任何单个查找O(1),而不会产生大量开销。

    诚然,随着标准计数的增加,这变得不太实际,但是有了3,也不算太糟。

    如果您想要更大的灵活性,那么数据库是一个合适的选择。许多数据库都可以选择作为完全在内存中的数据库,包括SQLite,它允许以比O(n)快得多的速度进行任意查询。

        2
  •  0
  •   Vlad    16 年前

    你为什么不能把你的数据放进几本字典里?一个字典把名字和数据对应起来,另一个字典把年龄等对应起来。

        3
  •  -1
  •   biegleux piyush    13 年前

    我假设所有的数组都是 IEnumerable

    使用LINQ来创建对象怎么样?

    http://www.beansoftware.com/ASP.NET-Tutorials/Linq-Objects-Collections-Arrays.aspx

    然后可以编写类似LINQ的查询语法,从数组中获取结果。