Следующий фрагмент кода является примером того, как использовать хронологический список ключей массива для того, чтобы распечатать содержимое массива в порядке. Затем он используется для создания массива с двумя элементами.
#!/usr/bin/tclsh
proc add_element {array_name key value} {
upvar $array_name aa
if { ![info exists aa($key)] } {
set aa($key) $value
lappend aa() $key
}
}
add_element names 1 Jane
add_element names 2 Tom
add_element names 3 Elisabeth
add_element names 4 Ted
add_element names 5 Sally
foreach e $names() {
add_element morenames $e $names($e)
add_element morenames $[expr $e + 1 ] $names($e)
}
foreach e $morenames() {
puts $morenames($e)
}
Для того, чтобы решить вашу проблему вы бы генерировать новые массивы для ATTEN и мощности с двойным элементом, как в приведенном выше примере. Затем вы создадите другие массивы, используя функцию, аналогичную приведенному выше примеру, если только они не будут возвращены при повторении через них.
Вы бы затем перебирать на другие массивы, скажем newTime, используя что-то похожее на ниже фрагменте кода:
set rows [array size newTime]
for {set row 1} {$row <= $rows} {incr row} {
$cells Item $row "A" $newatten($row)
$cells Item $row "B" $newpower($row)
$cells Item $row "C" $newbandwidth($row)
$cells Item $row "C" $newTime($row)
}
Следующий фрагмент кода представляет собой пример того, как переназначить цифровые ключи от массива TCL (Ассоциативный массив или HashMap).
#!/usr/bin/tclsh
set names(1) Jane
set names(2) Tom
set names(3) Elisabeth
set names(4) Robert
set names(5) Julia
set names(6) Victoria
foreach n [array names names] {
puts $n
puts $names($n)
}
puts "-------------"
foreach n [array names names] {
set newnames([expr $n -1]) $names($n)
}
foreach n [array names newnames] {
puts $n
puts $newnames($n)
}
Этого недостаточно, чтобы делать то, что вы хотите.
Вам нужно будет это сделать, а затем удалить unset
первый элемент и добавить set
последний элемент.
Вы не указали в своем вопросе, каков будет ваш последний элемент.
Если вы используете нецифровые клавиши, например, строковые ключи, вам придется дать этим ключам некоторую концепцию порядка, будь то сопоставление их с цифровыми клавишами или с использованием какого-либо другого метода.
Обратите внимание, что массивы TCL не возвращают вещи в цикле foreach, если вы их не скажете.
Списки TCL лучше подходят для этого, как показано на рисунке.
#!/usr/bin/tclsh
set i 0
foreach j "a b c" {
puts "$j is item number $i in list x"
incr i
}
Вы также не уточнили, какие структуры данных, которые требуется преобразовать, или вы просто хотите записать входной сигнал на экране (используя puts
) или в файл.
Например, хотите ли вы создать любую из следующих структур данных для вашей таблицы?
- TCL массив TCL массивов (HashMap из Hashmap)
- список списков
- TCL массив списков
- Перечень TCL Arrays (Список Hashmap)
Для получения дополнительной информации см:
Какая разница между форматами? Они выглядят одинаково. – zvrba
отредактировал вопрос .. В принципе мне нужно изменить массивы atten() power() на основе Time() .. Мне нужно назначить atten (i) atten (i-1) и power (i) на мощность (i -1) .. но нужно сохранить полосу пропускания() и time(). – amateur
Похоже, что ваши данные - это действительно записи записей Atten, Power, Bandwidth для разных времен - это правильно? Какова текущая структура массива - какой результат вы получаете, если вы запускаете «parray Atten», «parray power» и т. Д.? –