c - 有效地从 6 个源文件填充两个 d 数组

标签 c performance

首先我会提供详细信息:

我扫描了 6 个源文件,分别对应 6 个不同的区域。这些数据是有关地震的信息,我将其存储在以下结构中:

  typedef struct {
int year;
int month;
int day;
char time[9];
  } datetime_t;

 typedef struct {
datetime_t datetime;
double latitude;
double longitude;
double magnitude;
double depth;
char location[LOCATION];
  } data_t;

然后我创建了 6 个数组,每个区域一个:

    data_t Alaska[MAX_INFO];
data_t Central[MAX_INFO];
data_t Inter[MAX_INFO];
data_t East[MAX_INFO];
data_t West[MAX_INFO];
data_t Canada[MAX_INFO];

现在我的目标是显示一个 31x6 二维数组,其中显示每个区域每天的地震次数。我知道我可以这样做31天,针对6个地区,但必须有一个更有效的方法:

     for (i=0;i<A;i++)
    {
        if (Alaska[i].datetime.day == 1)
        {
            day_array[0][0] = i;
        }
        else if (Alaska[i].datetime.day == 2)
        {
            day_array[1][0] = i - day_array[0][0];
        }
        else if (Alaska[i].datetime.day == 3)
        {
            day_array[2][0] = i - day_array[1][0] - day_array[0][0];
        }
    }

我想到了一些类似的事情:

  for(j=0;j<REGIONS;j++)   /*particularly these two parts to fill the array*/ 
    {
        for(i=0;i<DAYS;i++) /*but I end up with same problem*/
        {
            for(k=0;k<A;k++)
            {
                if(Alaska[k].datetime.day == 1)
                {
                    day_array[i][j] = k;
                }
                else if(Alaska[k].datetime.day == 1)
                {
                    day_array[i][j] = k;
                }
            }
        }
    }   /*I KNOW THIS DOESNT WORK AS IS */

我知道从技术上讲,我可以在每个区域使用一个 for 循环来完成 186 天的第一件事,但我觉得好像有一种更有效的方法来做到这一点,但我似乎没有看到它......我不需要任何人告诉我如何做,而是如果有人可以提供帮助,那么朝着正确的方向插入会很棒!

最佳答案

看来您的目标是避免为每个数组编写单独的代码。在这种情况下,您有多种选择,其中

  • 使用二维数组代替当前的几个一维数组,其中额外的维度代表您的不同区域;然后使用嵌套循环
  • 创建一个数组指针数组 ( data_t *regions[] = {Alaska, Central, Inter, East, West, Canada}; ) 并像使用二维数组一样使用它。
  • 创建一个采用 data_t * 的函数并按照您想要的方式分析它。将每个区域对象传递给它。

关于c - 有效地从 6 个源文件填充两个 d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27389154/

相关文章:

sql - 如何加快三个大表的 INNER JOIN 中分组的 COUNT 个值的速度?

javascript - 使用 phantom.js 和 node.js 安排 PDF 生成

c - 如何计算两个字符串之间共有的不同字符的数量?

c++ - c 向我的编辑器添加自动建议

c - 如何使用 verilog PLI 通过 ncverilog 编译器与 c 通信

Python:使用相同的参数多次调用同一个函数,还是将结果保存为中间值?

使用并发的 Java 性能

c# - 两次 Linq 调用的性能比较

c++ - 我如何在此功能中释放内存?

c - 链接错误: cannot find -lrdkafka pre-compiled dynamic library in PlatformIO