【发布时间】:2019-10-04 15:09:38
【问题描述】:
我在 Tcl 中有两个列表:
列表1
{a/1 a/2 b/1 b/2}
列表2
{a b}
我想编写一个代码,它将检查来自list2 和list1 的元素并给出第一个匹配项并忽略其余匹配项,基本上在输出列表下方:
a/1 b/1
【问题讨论】:
我在 Tcl 中有两个列表:
列表1
{a/1 a/2 b/1 b/2}
列表2
{a b}
我想编写一个代码,它将检查来自list2 和list1 的元素并给出第一个匹配项并忽略其余匹配项,基本上在输出列表下方:
a/1 b/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 只是针对$needleList 中的每根针运行它的主体(与foreach 一样)并将其结果收集到一个列表中。这里很完美。
【讨论】: