在TCL中查找字符串中所有数字之和的最优雅的方法是什么?

在TCL中查找字符串中所有数字之和的最优雅的方法是什么?,tcl,Tcl,找到以下格式的TCL字符串中所有数字之和的最优雅的方法是什么? 例如 如何求和,30.8950+29.5680+20.5160?优雅的方法在于如何提取所需的输入 下面的一个简单地遍历列表并提取数值 set s1 "{A 30.8950} {B 29.5680} {C 20.5160}" set sum 0 foreach elem $s1 { # Extracting 2nd element to get the numerical value set num [lindex $

找到以下格式的TCL字符串中所有数字之和的最优雅的方法是什么? 例如


如何求和,30.8950+29.5680+20.5160?

优雅的方法在于如何提取所需的输入

下面的一个简单地遍历列表并提取数值

set s1 "{A 30.8950} {B 29.5680} {C 20.5160}"
set sum 0
foreach elem $s1 {
    # Extracting 2nd element to get the numerical value
    set num [lindex $elem 1]
    set sum [expr {$sum+$num}]
}

puts $sum
输出:

80.979

“优雅”的方法取决于如何提取所需的输入

下面的一个简单地遍历列表并提取数值

set s1 "{A 30.8950} {B 29.5680} {C 20.5160}"
set sum 0
foreach elem $s1 {
    # Extracting 2nd element to get the numerical value
    set num [lindex $elem 1]
    set sum [expr {$sum+$num}]
}

puts $sum
输出:

80.979
如果它实际上只是在字符串中浮动,则可以使用以下内容:

set sum [tcl::mathop::+ {*}[regexp -all -inline {-?\d+(?:\.\d+)(?:e[-+]?\d+)} $theString]]
如果它的结构更为复杂,例如Tcl元组列表,其中每个元组的第二项是要添加的值,则可以使用:

set sum [tcl::mathop::+ {*}[lmap tuple $theList {lindex $tuple 1}]]
# Requires Tcl 8.6
如果它实际上只是在字符串中浮动,则可以使用以下内容:

set sum [tcl::mathop::+ {*}[regexp -all -inline {-?\d+(?:\.\d+)(?:e[-+]?\d+)} $theString]]
如果它的结构更为复杂,例如Tcl元组列表,其中每个元组的第二项是要添加的值,则可以使用:

set sum [tcl::mathop::+ {*}[lmap tuple $theList {lindex $tuple 1}]]
# Requires Tcl 8.6