0
두리스트의 데카르트 곱을 계산해야합니다.중첩 된 foreach없이 두리스트의 Cartesian 제품
내 목록에 많은 수의 요소가 포함되어 있으므로 foreach
중첩 사례는 좋지 않습니다.
다른 용도로 사용할 수 있습니까?
두리스트의 데카르트 곱을 계산해야합니다.중첩 된 foreach없이 두리스트의 Cartesian 제품
내 목록에 많은 수의 요소가 포함되어 있으므로 foreach
중첩 사례는 좋지 않습니다.
다른 용도로 사용할 수 있습니까?
값을 조합하는 동안 작업 할 수 있습니다. 적어도 작업중인 구조의 스냅 샷 없이는 말하기 어렵습니다. 다음은 간단한 예입니다.
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
말씀이 볼 http://stackoverflow.com/a/1741391/488796). 일들을 빠르게하는 방법이 있지만 더 많은 정보가 필요합니다. "큰"크기는 얼마입니까? 코드가 스크립트의 라인에 있는지 또는 호출중인'proc'에 있는지 (바이트 코드에 대해 중요)? –