TCL:找到列表中的第一个数字?
TCL: Find first number in list?
使用列表,是否可以找到列表中的第一个值? (不使用明显的 foreach item> $list 循环)
例如我有一个列表 {23dsf} { } {2a} {255} {gsd3fs} {fg'dslk23} {...}
我正在查看 lsearch -integer,但这需要确定数字是什么 :(
我需要简单地识别第一个数值,即 255 (lindex 3)
我只想使用 foreach
循环,但如果你 真的 不想,好吧,递归只是换了一种循环:
#!/usr/bin/env tclsh
package require Tcl 8.6
proc firstint {lst} {
if {[llength $lst]} {
set first [lindex $lst 0]
if {[string is integer -strict $first]} {
return $first
} else {
tailcall firstint [lrange $lst 1 end]
}
}
}
set lst [list {23dsf} { } {2a} {255} {gsd3fs} {fg'dslk23} {...}]
puts [firstint $lst]
这里有一个one-liner,用lmap
过滤掉non-integers,然后只取剩下的第一个元素:
(bin) 9 % set lst [list {23dsf} { } {2a} {255} {gsd3fs} {fg'dslk23} {...} 42]
23dsf { } 2a 255 gsd3fs fg'dslk23 ... 42
(bin) 10 % lindex [lmap i $lst {expr {[string is integer -strict $i] ? $i : [continue]}}] 0
255
使用评论中指出的 lsearch -regexp
。
给定列表:
set lst {{23dsf} { } {2a} {255} {gsd3fs} {fg'dslk23} {...}}
lsearch -regexp $lst {^\d+$}
或其等效物
lsearch -regexp $lst {^[[:digit:]]+$}
Return 列表中第一个数值的索引 (3)。
使用列表,是否可以找到列表中的第一个值? (不使用明显的 foreach item> $list 循环)
例如我有一个列表 {23dsf} { } {2a} {255} {gsd3fs} {fg'dslk23} {...}
我正在查看 lsearch -integer,但这需要确定数字是什么 :(
我需要简单地识别第一个数值,即 255 (lindex 3)
我只想使用 foreach
循环,但如果你 真的 不想,好吧,递归只是换了一种循环:
#!/usr/bin/env tclsh
package require Tcl 8.6
proc firstint {lst} {
if {[llength $lst]} {
set first [lindex $lst 0]
if {[string is integer -strict $first]} {
return $first
} else {
tailcall firstint [lrange $lst 1 end]
}
}
}
set lst [list {23dsf} { } {2a} {255} {gsd3fs} {fg'dslk23} {...}]
puts [firstint $lst]
这里有一个one-liner,用lmap
过滤掉non-integers,然后只取剩下的第一个元素:
(bin) 9 % set lst [list {23dsf} { } {2a} {255} {gsd3fs} {fg'dslk23} {...} 42]
23dsf { } 2a 255 gsd3fs fg'dslk23 ... 42
(bin) 10 % lindex [lmap i $lst {expr {[string is integer -strict $i] ? $i : [continue]}}] 0
255
使用评论中指出的 lsearch -regexp
。
给定列表:
set lst {{23dsf} { } {2a} {255} {gsd3fs} {fg'dslk23} {...}}
lsearch -regexp $lst {^\d+$}
或其等效物
lsearch -regexp $lst {^[[:digit:]]+$}
Return 列表中第一个数值的索引 (3)。