2016-03-05 2 views
0

Я подозреваю, что есть один вкладыш, который принимает массив в строку, которая выглядит как x = 1; y = 2; z = 3. Как я могу это сделать? Я в настоящее время используюPrint array key = значение с двоеточием, разделяющим

set vals [join [array names a] \;] 

для получения x; y; z, но хотел бы, чтобы значения были там. Если значение не имеет значения, я хотел бы пропустить знак =, например, x = 1; y; z = 3. Может быть, с массивом?

Это получает всю информацию там, но результат выглядит как х; 1; у; 2; г; 3; д; 3

set vals [join [array get a] \;] 

некоторые, как я думаю, есть кусочек мы можно принять здесь

Обновление. Да, я знаю, что вы можете сделать предлог, но мне интересно, есть ли один лайнер. Например, это, кажется, работает

foreach { k v } [array get a] { 
    if {$v ne ""} { 
    lappend valList $k=$v 
    } else { 
    lappend valList $k 
    } 
} 
set vals [join $valList \;] 

ответ

0
join [lmap {k v} [array get a] {if {$v ne {}} {join [list $k $v] =} {set k}}] \; 

Если Tcl не lmap, есть удобный replacement.