两个列表中第一个匹配的输出列表

时间:2019-05-17 09:45:55

标签: list tcl matching

我在Tcl中有两个列表:

list1

{a/1 a/2 b/1 b/2}

list2

{a b}

我想编写一个代码,该代码将检查list2list1中的一个元素并给出第一个匹配项,而忽略其余匹配项,基本上在输出列表下面:

a/1 b/1

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一样),并将其结果收集到一个列表中。在这里很完美。