范围交叉是一个简单但非平凡的问题.
已经回答了两次:
第一个解决方案是O(n),第二个解决方案是数据库(当然小于O(n)).
我有同样的问题,但对于一个大的n,我不在数据库中.
这个问题似乎与存储2D点非常相似,可以快速检索矩形内的那些,但我看不到它是如何映射的.
那么你将数据结构存储在哪个数据结构中,以便搜索范围的成本低于O(n)?(使用可用于Java的库的额外功劳)
编辑:
我想获得所有相交范围的子集,这意味着搜索范围可以与多个范围相交.
Java中需要小于O(n)的方法是:
public class RangeSet {
....
public Set<Range> intersects(Range range);
....
}
Run Code Online (Sandbox Code Playgroud)
其中Range只是一个包含一对int start和end的类.
这不是一个不可能的问题,我已经有了解决方案,我只是想看看是否有更标准/更简单的方法
我曾经读过Imaar Spaanjars关于如何构建3层应用程序的文章.(http://imar.spaanjaars.com/416/building-layered-web-applications-with-microsoft-aspnet-20-part-1)这已成为我编码的基础.
因此,我通过继承a来实现集合List<T>.因此,如果我有一个名为Employee的类,要实现一个集合,我还将有一个Employees类,如下所示.
class Employee
{
int EmpID {get;set;}
string EmpName {get;set;}
}
class Employees : List<Employee>
{
public Employees(){}
}
Run Code Online (Sandbox Code Playgroud)
我从来没有真正质疑这一点,因为它为我做了工作.但是现在我开始尝试一些事情,我不确定这是否是正确的方法.
例如,如果我想从Employees获得一个子集,例如
Employees newEmployees = (Employees) AllEmployees.FindAll(emp => emp.JoiningDate > DateTime.Now);
Run Code Online (Sandbox Code Playgroud)
这会抛出System.InvalidCastException.但是,如果我使用以下内容则没有问题.
List<Employee> newEmployees = AllEmployees.FindAll(emp => emp.JoiningDate > DateTime.Now);
Run Code Online (Sandbox Code Playgroud)
那么我该如何实现Employees以便我不必List<Employee>在DAL或BLL中明确使用?或者我怎么摆脱InvalidCastexception?