TCL 滤波器阵列结果

TCL filter array results

$myList 通过 array get 保存数组的内容。

lappend myList array get myArray * * *
puts "$myList"

{636174,736f756e64,30 6d656f77 666f78,736f756e64,30 796969
646f67,736f756e64,30 776f6f66 666f78,736f756e64,31 796970
646f67,736f756e64,31 6261726b 646f67,736f756e64,32 77756666}

我要寻找的最终结果是收集所有没有用逗号连接的条目。

6d656f77 796969 776f6f66 646f67 6261726b 77756666

如果我要使用 lmap 手动硬编码值,则此输出正确。

% puts [lmap x {636174,736f756e64,30 6d656f77 666f78,736f756e64,30 796969 646f67,736f756e64,30 776f6f66 666f78,736f756e64,31 796970 646f67,736f756e64,31 6261726b 646f67,736f756e64,32 77756666} {if {[string first , $x] != -1} continue {set x}}]
6d656f77 796969 776f6f66 796970 6261726b 77756666

如果我使用变量 $myList,则输出 null。

puts [lmap x $myList {if {[string first , $x] != -1} continue {set x}}]

lsearch 也返回空值。

[lsearch -all -inline -not $myList *,*]

我做错了什么?

您似乎没有 lappend 正确地 lappend 将整个列表 lappend 放入另一个列表。

array set myArray {
    636174,736f756e64,30 6d656f77 666f78,736f756e64,30 796969
    646f67,736f756e64,30 776f6f66 666f78,736f756e64,31 796970
    646f67,736f756e64,31 6261726b 646f67,736f756e64,32 77756666
}
lappend myList [array get myArray]

此处,$myList 仅包含一个元素,该元素本身又包含不同的值。您应该扩展 array get:

返回的列表
lappend myList {*}[array get myArray]

也就是说,在我看来,数组中的所有键似乎都包含逗号,而您需要这些值,所以在这种情况下,您不妨跳过 lappend:

set myList [lmap {key val} [array get myArray] {set val}]
# 776f6f66 796969 6d656f77 6261726b 796970 77756666