【问题标题】:Print Cartesian product of two list, without nested foreach打印两个列表的笛卡尔积,没有嵌套的 foreach
【发布时间】:2014-11-13 06:40:48
【问题描述】:
我需要计算两个列表的笛卡尔积。
我的列表包含大量元素,因此嵌套 foreach 在我的情况下不是一个好主意。
还有什么可以用的吗?
【问题讨论】:
标签:
tcl
cartesian-product
【解决方案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