Как скопировать словарь в C - PullRequest
0 голосов

Я прочитал эту статью: Быстрый способ реализовать словарь в C и реализовал его. Нужно сказать, что я изменяю установку и поиск, чтобы использовать хештаб в качестве аргумента вместо глобальной переменной. Это работает как шарм:

struct nlist *install(struct nlist **hashtab,char *name, symbol *dfn);
struct nlist *lookup(struct nlist **hashtab, char *s);

Проблема в том, что мне нужно скопировать ха sh в новенький. Сначала я пытаюсь:


struct nlist **copy_context(struct nlist **hashtab){
    nlist **copy = (nlist**)malloc(sizeof(nlist*)*HASHSIZE);
    struct nlist *np;
    int i = 0;
    for (np = hashtab[i]; i<HASHSIZE ;i++ ){
        debug_log("i vale %i",i);
        if( np != NULL ){
            install(copy,np->name,np->dfn);
        }
    }
    return copy;
}

, но мне не ясно, где хранятся значения и где начать копирование. Я думал что-то вроде:

struct nlist **copy_context(struct nlist **hashtab){
nlist **copy = (nlist**)malloc(sizeof(nlist*)*HASHSIZE);
i = 0;//this is not correct
or (np = hashtab[i]; np != NULL; np = np->next){
        install(copy,np->name,np->dfn);
    }
return copy;
}

, но notingh работает.

1 Ответ

0 голосов

, как сказал «Какой-то программист», мне нужно сделать два цикла, один для самой таблицы и один для списка в индексе этой таблицы.

struct nlist **copy_context(struct nlist **hashtab){
    nlist **copy = (nlist**)malloc(sizeof(nlist*)*HASHSIZE);
    struct nlist *np;
    for (int i = 0; i<HASHSIZE; i++ ){
        np = hashtab[i];
        while( np )
        {
            install(copy,np->name,np->dfn);
            np = np->next;
        }
    }
    return copy;
}
...