从6个源文件中有效填充两个d数组

时间:2014-12-09 21:27:59

标签: c performance

First Ill详细说明:

我扫描了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 */

我知道技术上我可以做的第一件事就是186天,每个地区都有一个for循环,但我觉得有一种更有效的方法可以做到这一点而我似乎没有看到它......我不需要任何人告诉我该怎么做,而是如果有人能提供帮助的话,向正确的方向推进会很棒!

1 个答案:

答案 0 :(得分:1)

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

  • 使用二维数组而不是几个当前的一维数组,其中额外的维度代表您的不同区域;然后使用嵌套循环
  • 创建一个数组指针数组(data_t *regions[] = {Alaska, Central, Inter, East, West, Canada};)并将其用作2D数组。
  • 创建一个带data_t *的函数并根据需要对其进行分析。将每个区域内的对象传递给它。