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

时间:2010-03-18 21:25:57

标签: c# data-structures

我正在开发一个项目,其中Arrays是所有内容的默认数据结构,每个查询都是以下列形式的线性搜索:

  • 需要具有特定名称的客户? 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搜索客户。我们很少搜索任何其他内容。

一个好的数据结构是否支持这些类型的任意查询,查找优于O(n)? .NET的任何开箱即用的实现?

3 个答案:

答案 0 :(得分:4)

对于内存,你有几个选择。

大多数选项都是O(n)。话虽这么说,字典查找可以接近O(1)。

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

当然,随着你的标准计数上升,这变得不太实际,但是对于3,它并不太糟糕。

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

答案 1 :(得分:0)

为什么不能将数据放入多个词典中?一个字典将名称映射到数据,另一个字典映射年龄等。

答案 2 :(得分:-1)

我假设所有数组都是IEnumerable

如何将LINQ用于对象?

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

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

相关问题