실험을 하다 보면 경우의 수의 조합들을 다 구해서 실험을 해야 하는 경우가 있습니다.

 

이러한 조합의 경우의 수를 구하는 것을 Cartesian Product 라고 하는데요.

 

단순히 생각하면 Cartesian Product 를 구하기 위해서는 for 문을 계속 중첩해서 사용해야 하지만 이게 두~세개만 넘어가도 굉장히 헷갈리고 힘든일이 됩니다.

 

이러한 경우 Cartesian Product 를 구하는 함수를 만들어 놓고 사용한다면~ 굉장히 편리하죠~

 

저는 Powershell 에서 Cartesian Product 를 구해야 하는 경우가 있었는데~ 아래 주소에 그 코드가 있더군요. 좋은 코드 같아서 여러분들께도 소개하려 합니다.

 

코드 출처 : http://makeyourownmistakes.wordpress.com/2012/04/17/simple-n-ary-product-generic-cartesian-product-in-powershell-20/

 

function CartesianProduct

{

$returnValue = @()

foreach ($parameter in $MyInvocation.UnboundArguments)

{

$returnValue = AddToAll $returnValue $parameter

}

return $returnValue

}

 

function AddToAll($currentResult, $valuesToAdd)

{

$returnValue = @()

if ($valuesToAdd -ne $null)

{

foreach ($value in $valuesToAdd)

{

if ($currentResult -ne $null)

{

foreach ($result in $currentResult)

{

$newResult = @($result)

$newResult += ,$value

$returnValue += ,$newResult

}

}

else

{

$returnValue += ,$value

}

}

}

else

{

$returnValue = $currentResult

}

return $returnValue

}

 

$values1 = @("html", "csv", "email")

$values2 = @("1", "7", "14")

$values3 = @("12", "24")

$values4 = @("server1.mydomain.com")

$product = CartesianProduct $values1 $values2 $values3 $values4

 

위 코드를 실행시켜보면~ $product 에는 $values1 ~ $values4 의 모든 경우의 수의 조합이 다 생성되서 들어가게 되고~

 

$product 의 각 인자들은 아래와 같습니다.


 

$product[0], $product[1]… 의 각 값들은 –split 를 이용해서 나눌수가 있으며 아래와 같이 $c 변수의 인덱스를 이용해서 접근 할 수 있습니다.


+ Recent posts