我在Tcl中有两个列表:
list1
{a/1 a/2 b/1 b/2}
list2
{a b}
我想编写一个代码,该代码将检查list2
中list1
中的一个元素并给出第一个匹配项,而忽略其余匹配项,基本上在输出列表下面:
a/1 b/1
答案 0 :(得分:1)
其中唯一棘手的一点是确切知道如何在列表1中搜索列表2中的项目。我将假设它们是非常简单的字符串,并且我们可以对其进行全局匹配(如如果使用string match
)。在默认情况下,lsearch
支持这种情况,允许我们使用非常简单的代码:
proc FirstMatches {haystackList needlesList} {
lmap needle $needlesList {
lsearch -inline $haystackList $needle*
}
}
puts [FirstMatches {a/1 a/2 b/1 b/2} {a b}]
lmap
仅对foreach
中的每一根针运行其主体(与$needleList
一样),并将其结果收集到一个列表中。在这里很完美。