我需要计算两个列表的笛卡尔积。
我的列表包含大量元素,因此嵌套的foreach
在我的情况下不是一个好主意。
还有什么可以在那里使用吗?
答案 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