실험을 하다 보면 경우의 수의 조합들을 다 구해서 실험을 해야 하는 경우가 있습니다.
이러한 조합의 경우의 수를 구하는 것을 Cartesian Product 라고 하는데요.
단순히 생각하면 Cartesian Product 를 구하기 위해서는 for 문을 계속 중첩해서 사용해야 하지만 이게 두~세개만 넘어가도 굉장히 헷갈리고 힘든일이 됩니다.
이러한 경우 Cartesian Product 를 구하는 함수를 만들어 놓고 사용한다면~ 굉장히 편리하죠~
저는 Powershell 에서 Cartesian Product 를 구해야 하는 경우가 있었는데~ 아래 주소에 그 코드가 있더군요. 좋은 코드 같아서 여러분들께도 소개하려 합니다.
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 변수의 인덱스를 이용해서 접근 할 수 있습니다.
'programming language > powershell' 카테고리의 다른 글
효율적인 Powershell 코딩을 위한 Powershell IDE, Powershell Plus (0) | 2014.04.10 |
---|---|
Powershell 현재 스크립트 파일의 디렉터리 (0) | 2014.01.20 |
Powershell 이전 directory 로 돌아가기 CD - (2) | 2013.10.20 |
Powershell profile 적용 및 alias (2) | 2013.10.16 |
PowerShell Script가 실행되는 현재 폴더 확인 (0) | 2012.12.17 |
Powershell 지정 일 이후의 파일 백업 (0) | 2012.03.07 |
Powershell 특정 확장자 파일의 경로 다 찾기 (0) | 2011.04.01 |
Powershell 용량 작은 파일 지우기 (0) | 2011.03.06 |
댓글