查找TCL两个列表的交集(Find the intersection of two lists in

2019-10-17 03:27发布

是否有一个命令,让我得到的交集(成员在这两个列表apear)两个名单的?

例如,如果列表是:

abcdhcefgh

结果应该是ch

Answer 1:

假如你真正拥有的是一组(具有独特元素的列表),你可以使用tcllib:

::结构::集相交? 设置1 ...?

package require Tcl 8.0
package require struct::set

set list1 {a b c d h}
set list2 {c e f g h}
::struct::set intersect $list1 $list2
> c h


Answer 2:

没有一个命令,但通常我这样做是建设一个或多个表的过程中缓存的元素 ,以节省时间的方式。 例如,给定以下内容:

foreach x {a b c d h} {
    lappend list_x $x
}

foreach y {c e f g h} {
    lappend list_y $y
}

我想补充:

foreach x {a b c d h} {
    lappend list_x $x
    set cache($x) 1
}

foreach y {c e f g h} {
    lappend list_y $y
    if {[info exists cache($y)]} {
        lappend list_xy $y
    }
}

puts $list_xy

输出:

c h


Answer 3:

package require Tcl 8.5
set a {1 2 3 4 5}
set b {3 4 5 6 7}
set intersect [list]

foreach elem $a {
    if {$elem in $b} {
        lappend intersect $elem
    }
}


文章来源: Find the intersection of two lists in tcl
标签: tcl