I'm working on a project where Arrays are the default data structure for everything, and every query is a linear search in the form of:
- Need a customer with a particular name?
customer.Find(x => x.Name == name)
- Need a customer with a particular unique id?
customer.Find(x => x.Id == id)
- Need a customer of a particular type and age?
customer.Find(x => x is PreferredCustomer && x.Age >= age)
- Need a customer of a particular name and age?
customer.Find(x => x.Name == name && x.Age == age)
In almost all instances, the criteria for lookups is well-defined. For example, we only search for customers by one or more of the properties Id, Type, Name, or Age. We rarely search by anything else.
Is a good data structure to support arbitrary queries of these types with lookup better than O(n)? Any out-of-the-box implementations for .NET?