我有2个文件,其中有几千行坐标,采用txt / csv格式。
第一个文件的每一行的格式是:
“km, latitude, longitude
”。
在另一个文件中我只有“latitude, longitude
”,我试图找到一种有效的方法来搜索第二个文件中的数千个点。
我用来匹配坐标只有4位小数,但偶尔我需要减少到3那些不匹配和插值的坐标。
我的问题是,如果你知道一种结构替代方案,那么这些搜索和访问都不会是永恒的。
我正在考虑(对于两个文件)使用StreamReader
来访问ReadLine()
,split()
该行,然后比较它们进行循环。如果匹配则在第二个文件中写入km。如果经过迭代的线的经度(它的变化远远超过纬度)匹配,那么首先可以进行一些“改进”搜索,然后检查经度。
也许将所有第一个文件存储在Dictionary<<latitude,longitude>,km>
中会改善某些内容吗?
答案 0 :(得分:0)
使用Dictionary将是一个很好的方法,因为它会导致O(1)搜索文件结果,但我认为内存使用率非常高,并且构建字典会花费很多。
我在考虑根据纬度和经度对数据进行排序后的二元搜索。在这种情况下NLog(N),您可以在logN时间找到每个匹配。
struct D : ICompareable
{
decimal latitude,
decimal longitude,
int km ;
public int CompareTo(object a)
{
D incoming = (D)a;
if(incoming.latitude == this.latitude)
return this.longitude.CompareTo(incoming.longitude);
return this.latitude.CompareTo(incoming.latitude);
}
}
// load the first file data in the Struct array and do the Binary Search