使用`lmap`过滤字符串列表

时间:2015-05-27 17:15:21

标签: tcl

假设我想从列表中获取所有5个字母的单词。

form

我对引用set words {apple banana grape pear peach} lmap word $words {if {[string length $word] == 5} {expr {"$word"}} else continue} # ==> apple grape peach 的混乱感到不满意。我希望这会奏效:

expr {"$word"}

从lmap正文“返回”字符串的优雅方法是什么?

2 个答案:

答案 0 :(得分:5)

主要选择是使用set或使用string cat(假设您是最新的)。为清晰起见,我将以下示例分为多行:

lmap word $words {
    if {[string length $word] != 5} {
        continue
    };
    set word
}
lmap word $words {
    if {[string length $word] == 5} {
        # Requires 8.6.3 or later
        string cat $word
    } else {
        continue
    }
}

答案 1 :(得分:2)

我通常使用set

lmap word $words {if {[string length $word] == 5} {set word} else continue}

或有时(如果我确定expr不会重新解释word中的值):

lmap word $words {expr {[string length $word] == 5 ? $word : [continue]}}

当然也有这个:

lsearch -regexp -all -inline $words ^.{5}$

文档:continueexpriflmaplsearchsetstring