用于有效搜索与不同文本文件中的字符串对匹配的字符串对的结构

时间:2014-04-08 10:16:28

标签: c# file-io data-structures match

我有2个文件,其中有几千行坐标,采用txt / csv格式。 第一个文件的每一行的格式是: “km, latitude, longitude”。 在另一个文件中我只有“latitude, longitude”,我试图找到一种有效的方法来搜索第二个文件中的数千个点。 我用来匹配坐标只有4位小数,但偶尔我需要减少到3那些不匹配和插值的坐标。

我的问题是,如果你知道一种结构替代方案,那么这些搜索和访问都不会是永恒的。

我正在考虑(对于两个文件)使用StreamReader来访问ReadLine()split()该行,然后比较它们进行循环。如果匹配则在第二个文件中写入km。如果经过迭代的线的经度(它的变化远远超过纬度)匹配,那么首先可以进行一些“改进”搜索,然后检查经度。

也许将所有第一个文件存储在Dictionary<<latitude,longitude>,km>中会改善某些内容吗?

1 个答案:

答案 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