可以使用什么数据结构替代4维数组

时间:2018-11-22 18:12:56

标签: c arrays

目前,在我的测试框架中,为了跟踪测试结果,我正在维护4D数组:TestResult [domain] [client] [testno] [resourceno]

测试用例基本上有3个循环

    For each domain(0-2)  
    For each client(0-8)   
    For each resource(0-8)
    Execute test1
    Store TestResult
    Execute test2
    Store TestResult

除了4D数组之外,是否还有更好的数据结构可用于C语言?

1 个答案:

答案 0 :(得分:0)

好吧,让我们回到相反的极端:

typedef struct
{
    // whatever you need...
} Resource;

typedef struct
{
    Resource a;
    Resource b;
    // ...
    Resource g;
} Client;

typedef struct
{
    Client a;
    Client b;
    // ...
    Client g;
} Domain;

好的,我跳过了Test结构和包含所有域的结构,这个想法应该仍然很清楚...

void processResource(Resource* resource)
{ /* ... */ }

void processClient(Client* c)
{
    processResource(&c->a);
    // ...
    processResource(&c->g);
}

void processDomain(Domain* d)
{
    processClient(&d->a);
    // ...
    processClient(&d->g);
}

如上所述,这是另一个极端。您可以在结构中维护数组,以便可以迭代为:

void processDomain(Domain* d)
{
    for(size_t i = 0; i < sizeof(d->clients)/sizeof(*d->clients); ++i)
    {
        processResource(d->clients + i);
    }
}

或者在某些结构中具有一些较低的n维数组。任何组合都可以解决问题,取决于您,无论您认为哪种方法最合适...

您甚至可以扩展到动态数组:

typedef struct
{
    Resource* resources;
    size_t count;
} Client;

如果您认为管理可变数量的子元素很有用。

如果所有这些都比原始4D阵列“好” ?我会说,主要是出于口味问题,除非也许有更好的可重用性,尤其是较低层嵌套结构的重用性,但当前的用例似乎对于此实际应用而言太具体了。