Как объявить словарь словаря словарей в TCL? - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь объявить словарь словаря словаря в TCL, но я не могу go до 3-го уровня создать ключ.

Это то, что я сделал, чтобы получить словарь словари

set my_dict [dict create]

dict append my_dict "key1"

dict with my_dict {                                                                                                                                                                                                                                                         
    dict append "key1" "key2"                                                                                                                                                                                                                                                                
}

puts $my_dict
>> key1 {key2 {}}

Это как и ожидалось. Теперь мне нужен другой уровень словаря в следующем:

key1 {key2 {key3 {}}}

Как этого достичь?

Я пытался сделать следующее:

dict with my_dict {                                                                                                                                                                                                                                                         
    dict append "key1" "key2" "key3"                                                                                                                                                                                                                                                               
}

Но он возвращает следующее:

key1 {key2 key3}

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Хорошо, если я буду следовать тому, что вы пытаетесь сделать; Я бы сделал:

set my_dict [dict create]

dict append my_dict "key1"

dict with my_dict {
    dict append "key1" "key2"
    dict with key1 {
        dict append "key2" "key3"
    }
}

puts $my_dict

Но я думаю, что простейшее использование команд dict по-прежнему:

set my_dict [dict create key1 [dict create key2 [dict create key3 ""]]]

Если вы не хотите просто делать:

set my_dict {key1 {key2 {key3 {}}}}
0 голосов
/ 17 апреля 2020

Первоначальное создание этого может быть сделано просто:

dict set my_dict key1 key2 key3 {}

, но добавление к этому внутреннему словарю немного неловко. (Не все подкоманды dict поддерживают вложенные словари напрямую; слишком много неоднозначностей syntacti c, чтобы позволить ему работать.) Именно здесь dict update особенно полезно:

dict update my_dict $key1 subdict1 {
    dict update subdict1 $key2 subdict2 {
        dict append subdict2 $key3 "foo bar"
    }
}

Преимущество более dict with в том, что последний расширяет весь словарь, и вы не имеете никакого реального контроля над тем, какие переменные изменяются; dict update избирателен в нескольких отношениях (например, вы можете использовать переменные с именами, не совпадающими с ключами, и вы можете только расширять ключи, которые вам нужны).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...