10

I would like to do something like this. Index into an array of functions and apply the appropriate function for the desired loop index.

for ($i = 0; $i -lt 9; $i++)
{
    $Fields[$i] = $Fields[$i] | $($FunctionTable[$i])
}
#F1..F9 are defined functions or rather filter functions

$FunctionTable =  {F1}, 
                {F2}, 
                {F3},
                {F4},
                {F5},
                {F6},
                {F7},
                {F8},
                {F9}
tellingmachine
  • 1,067
  • 11
  • 23

2 Answers2

23

Here's an example of how to do this using the call (&) operator.

# define 3 functions
function a { "a" }
function b { "b" }
function c { "c" }

# create array of 3 functioninfo objects
$list = @(
  (gi function:a),
  (gi function:b),
  (gi function:c)
)

0, 1, 2 | foreach {
  # call functions at index 0, 1 and 2
  & $list[$_]
}

-Oisin

p.s. this means your pipeline should bve amended to something like:

$Fields[$i] = $Fields[$i] | & $FunctionTable[$i]
x0n
  • 51,312
  • 7
  • 89
  • 111
2

Here is something similar also using the & operator:

function f1
{ "Exec f1" }

function f2
{ "Exec f2" }

function f3
{ "Exec f3" }

function f4
{ "Exec f4" }

function UseFunctionList ( [string[]]$FunctionList )  
{  
foreach ( $functionName in $functionList )  
  {
  & $FunctionName
  }
}

function Go  
{  
'List 1'  
$FunctionList = 'f1','f2','f3','f4'  
UseFunctionList $FunctionList  
'List 2'  
$FunctionList = 'f4','f3','f2'  
UseFunctionList $FunctionList  
}

David Mans
  • 21
  • 2