Как создать многомерную хеш-подобную структуру - PullRequest
0 голосов
/ 15 мая 2018

Каков наилучший способ создания и доступа к многомерным хэшам в TCL, которые присутствуют в Perl, например:

if{ $line = (\D+) ....} {
$hash{name}=$1
$hash{height}=$2
}

и т.д.

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете использовать составные ключи, как это (самый удобный вариант в простейших случаях):

set x 1
set y 2
set d($x,$y) 3

Или вы можете поместить словарь в элемент массива:

set x 1
set y 2
dict set d($x) $y 3

Или вы можете использовать вложенный словарь:

set x 1
set y 2
dict set d $x $y 3

Существуют некоторые тонкости в различиях между ними, но большую часть времени код большинства людей на самом деле не заботится и не нуждается в заботе.

Вот тот случай, когда вам, скорее всего, придется позаботиться. Если вы делаете первый вариант и не можете дать гарантии относительно того, какие символы могут быть в атомарных ключах, вы можете использовать list для построения общего ключа (поскольку он знает, как применять правила цитирования, чтобы избежать путаницы):

set x "the quick, cunning brown fox"
set y "the ever-so, ever-so lazy dog"
set d([list $x $y]) "jumps over"

Конечно, это делает доступ более неловким, поскольку вам нужно использовать list (или другую команду построения списка) при построении ключей (или иметь правильные строковые литералы, что раздражает для большего размера). ключи). Два других варианта вообще не имеют проблем с путаницей произвольных ключей; словари не перепутали такие вещи, как явная цель проектирования.

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