打印笛卡尔积的两个列表,没有嵌套的foreach

时间:2014-11-13 06:40:49

标签: tcl cartesian-product

我需要计算两个列表的笛卡尔积。

我的列表包含大量元素,因此嵌套的foreach在我的情况下不是一个好主意。

还有什么可以在那里使用吗?

1 个答案:

答案 0 :(得分:1)

您可以在将值放在一起时处理这些值。如果没有至少一个你正在使用的结构的快照,很难说。这是一个简单的例子。

proc没有返回矩阵,它对矩阵中的点有效。

proc my_cartesian {a b} {

    set len_a [llength $a]
    set len_b [llength $b]
    set len [expr $len_a * $len_b]
    set y 0
    for {set i 0} {$i < $len} {incr i} {
        set x [expr $i % $len_a]
        if {$x == 0 && $i != 0} {
            incr y
        }
        set px [lindex $a $x]
        set py [lindex $b $y]

        # Your code
        puts "$px, $py"
    }

}

my_cartesian {a b c} {1 2 3}

输出:

a, 1
b, 1
c, 1
a, 2
b, 2
c, 2
a, 3
b, 3
c, 3