Sorting not working in a Powershell function

Viewed 107

I have the following function in Powershell. It always returns False and also the sorting of the arrays doesn't work within the function while it works in the console. The function is

# $a = [121, 144, 19, 161, 19, 144, 19, 11]
# $b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]

function comp($a, $b) {
    if( -Not ($a.length -Eq $b.length) || -Not $a || -Not $b) {
        return $false
    }
    $a = $a | sort 
    $b = $b | sort 
    # Adding echo statements here to check if $a and $b are sorted tells that both are NOT sorted despite assigning them to the same variable
    # Assigning the sorted arrays to other variables such as $x and $y again doesn't solve the problem. $x and $y also have the unsorted values
    for($i=0;$i -lt $a.length;$i++) {
        if( -Not ($b[$i] -Eq $a[$i]*$a[$i])) {
            return $false
        }
    }
    return $true
}

Note: $a and $b in the top are initialized without [ and ] and it is just provided to give emphasis that they are arrays.

The above function returns False while it must be True. I then tried this

function comp($a, $b) {
    if( -Not ($a.length -Eq $b.length) || -Not $a || -Not $b) {
        return $false
    }

    for($i=0;$i -lt $a.length;$i++) {
        $flag = $false
        for($j=0;$j -lt $b.length; $j++) {
            if($b[$j] -Eq $a[$i]*$a[$i]) {
                $flag = $true
                # Never gets into this i.e. never executed
                break;
            }
        }
        if( -Not $flag) {
            return $flag
        }
    }
    return $true
}

But this works on the console when run without a function. Please see the image below Powershell Output

It didn't return False. And hence, the output is True which is correct

Now see the output for the above functions Function 1 powershell

Now for the second one Function 2 powershell

What is wrong here?

1 Answers

You're passing the arguments to comp incorrectly.

PowerShell's command invocation syntax expects you to pass arguments separated by whitespace, not a comma-separated list.

Change:

comp($a, $b)

to:

comp $a $b
# or
comp -a $a -b $b

See the about_Command_Syntax help topic for more information on how to invoke commands in PowerShell

Related