2011-10-20 42 views
9

Tôi gặp một số vấn đề với mảng hai chiều trong PowerShell. Đây là những gì tôi muốn làm:Powershell: Mảng đa chiều là giá trị trả về của hàm

Tôi tạo một hàm được cho là trả về mảng hai chiều. Khi gọi hàm tôi muốn giá trị trả về là một mảng hai chiều mới.

Đối với một sự hiểu biết tốt hơn tôi đã thêm một chức năng Ví dụ, dưới đây:

function fillArray() { 
    $array = New-Object 'object[,]' 2,3 

    $array[0,0] = 1 
    $array[0,1] = 2 
    $array[0,2] = 3 

    $array[1,0] = 4 
    $array[1,1] = 5 
    $array[1,2] = 6 

    return $array 
} 
$erg_array = New-Object 'object[,]' 2,3 
$erg_array = fillArray 

$erg_array[0,1] # result is 1 2 
$erg_array[0,2] # result is 1 3 
$erg_array[1,0] # result is 2 1 

Kết quả không phải là những gì tôi mong đợi. Tôi muốn trả lại thông tin theo cách tương tự như được khai báo trong hàm. Vì vậy, tôi mong đợi $erg_array[0,1] để cung cấp cho tôi 2 thay vì 1,2 Tôi nhận được với mã ở trên. Làm thế nào tôi có thể đạt được điều này?

+0

Tại sao bạn mong đợi kết quả '$ erg_array [0,1] # là 1 2'? Nó phải là '$ erg_array [0,1] # kết quả 2', giống như bạn đã xác định, đây là một mục, không phải 2. Vì vậy, nó không phải là khá rõ ràng những gì bạn muốn nhận được. Bạn đang cố gắng để có được một cái gì đó không tồn tại. –

+0

Hoặc mục tiêu phải được sửa đổi hoặc phương tiện, ví dụ: chúng ta có thể cố gắng sử dụng mảng không phải 2-dim nhưng cái gì khác. –

Trả lời

10

Để trả lại mảng chính xác như nó là không có "unrolling" sử dụng toán tử dấu phẩy (xem help about_operators)

function fillArray() { 
    $array = New-Object 'object[,]' 2, 3 

    $array[0,0] = 1 
    $array[0,1] = 2 
    $array[0,2] = 3 

    $array[1,0] = 4 
    $array[1,1] = 5 
    $array[1,2] = 6 

    , $array # 'return' is not a mistake but it is not needed 
} 

# get the array (we do not have to use New-Object now) 
$erg_array = fillArray 

$erg_array[0,1] # result is 2, correct 
$erg_array[0,2] # result is 3, correct 
$erg_array[1,0] # result is 4, correct 

Các , tạo ra một mảng với một mục duy nhất (đó là mảng của chúng tôi). Mảng 1-mục này được bỏ chọn khi trả về, nhưng chỉ có một cấp, để kết quả chính xác là một đối tượng, mảng của chúng ta. Nếu không có ,, mảng của chúng ta không được kiểm soát, các mục của nó được trả về, không phải mảng. Kỹ thuật này với việc sử dụng dấu phẩy khi trả về sẽ được sử dụng với một số bộ sưu tập khác nữa (nếu chúng ta muốn trả về một cá thể bộ sưu tập, không phải các mục của nó).

3

Điều thực sự bị thiếu trong cổng này là những gì mọi người đang tìm kiếm. Làm thế nào để có được nhiều hơn một điều trong một chức năng. Vâng, tôi sẽ chia sẻ những gì mọi người muốn biết ai đã tìm kiếm và thấy điều này hy vọng nó sẽ trả lời câu hỏi.

function My-Function([string]$IfYouWant) 
{ 
[hashtable]$Return = @{} 

$Return.Success = $False 
$Return.date = get-date 
$Return.Computer = Get-Host 

Return $Return 
} 
#End Function 

$GetItOut = My-Function 
Write-host “The Process was $($GetItOut.Success) on the date $($GetItOut.date) on the  host  $($GetItOut.Computer)” 

#You could then do 
$var1 = $GetItOut.Success 
$Var2 =$GetItOut.date 
$Var3 = $GetItOut.Computer 

If ($var1 –like “True”){write-host “Its True, Its True”} 
Các vấn đề liên quan