首先我会提供详细信息:
我扫描了 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/