2015-06-12 8 views
0

Предположим, что процедура в Tcl выглядит следующим образом:Возвращение некоторой переменной из «прок» в Tcl

proc Section {ID x y} { 
. 
. 
"Some calculations do here" 
. 
. 
} 

Section 1 20 30 
Section 2 25 35 
Section 3 30 40 
Section 4 35 45 

Теперь я определяю это:

set IDsection {1 3} 

Тогда, я хотел бы прочитать все значения (произвольное число, 2 или более) в наборе (IDsection), который будет показывать идентификатор в вышеописанной процедуре и генерировать соответствующий y:

set Load {30 40} 

Как я могу получить значения в {} перед «Загрузка»?

+1

Я не понимаю, что вы хотите сделать. Можете ли вы продемонстрировать свою попытку и что пошло не так? – mkrieger1

ответ

0

Вы можете сделать это следующим образом:

proc Section {ID x y} { 
    set ::section_data($ID) [list $x $y] 
} 

proc getLoads {ids} { 
    global section_data 
    foreach id $ids { 
     lappend loads [lindex $section_data($id) end] 
    } 
    return $loads 
} 

Section 1 20 30 
Section 2 25 35 
Section 3 30 40 
Section 4 35 45 

set IDsection {1 4 1 3} 

set Load [getLoads $IDsection] ;# => 30 45 30 40 
+0

Спасибо большое! В вашем коде, если я подстановлю 'set IDsection {1 1 3}', я ожидаю, что результат будет '30 30 40 ', в то время как он помещает: '30 40' (объединяя одни и те же данные)! Другая проблема заключается в том, что ваш код сортирует результаты! Например, если вы замените «set IDsection {1 4 3}», результат будет «30 40 45», тогда как соответствующий ответ должен быть «30 45 40»! –

Смежные вопросы