2012-10-12 37 views
7

Làm thế nào để bạn làm việc với các mảng có độ dài động (ArrayLists/Lists) trong Powershell? Tôi về cơ bản muốn có một mảng 2D, nơi chiều dài của chỉ số ngoài cùng chưa được biết.Làm cách nào để điền một chuỗi độ dài không xác định trong Powershell?

Tôi đã thử khởi tạo một mảng với $array = @(), nhưng sẽ lấy chỉ mục ra khỏi phạm vi ngoại lệ khi giải quyết bất kỳ điều gì trong trường hợp này. Sau đó, tôi đã thử sử dụng toán tử + =, như tôi đã đọc trong một bài viết, nhưng điều đó sẽ dẫn đến việc nối chuỗi và không thêm phần tử.

Ví dụ:

$array = @() 
$array += @("Elem1x", "Elem1y") 
$array += @("Elem2x", "Elem2y") 
Echo $array[0][0] 

Output: "E" thay vì "Elem1x";

Trả lời

8

Hãy thử cách này:

$array = @() 
$array += ,@("Elem1x", "Elem1y") 
$array += ,@("Elem2x", "Elem2y") 
$array[0][0] 
+0

Đã chỉnh sửa câu trả lời của tôi vì tôi gặp lỗi lớn! –

+0

Bất cứ ai có thể giải thích những gì dấu phẩy thực sự không? – Nilzor

+0

@Nilzor đọc tại đây: http://blogs.msdn.com/b/powershell/archive/2007/01/23/array-literals-in-powershell.aspx –

9

câu trả lời của Christian là cách PowerShell để đi và hoạt động tuyệt vời cho hầu hết các trường hợp (nhỏ để mảng kích thước trung bình). Nếu mảng của bạn lớn thì bạn có thể muốn xem xét sử dụng ArrayList vì lý do hiệu suất. Tức là, mỗi khi bạn sử dụng += với một mảng, PowerShell phải tạo một mảng mới và sao chép nội dung cũ vào mảng mới và gán mảng mới cho biến đó. Đó là vì các mảng .NET có kích thước cố định. Đây là cách bạn có thể làm điều này bằng một ArrayList:

$list = new-object system.collections.arraylist 
$list.Add(("Elem1x", "Elem1y", "Elem1z")) > $null 
$list.Add(("Elem2x", "Elem2y")) > $null 
$list[0][0] 

BTW những gì các nhà điều hành += không phụ thuộc vào loại đối tượng ở phía bên tay trái của người điều khiển. Nếu nó là một chuỗi, sau đó bạn nhận được chuỗi nối. Nếu đối tượng là một mảng, thì phía bên tay phải được nối vào mảng (thông qua tạo mảng/bản sao mới).

+1

Tôi cũng sẽ thêm điều đó vào trải nghiệm của mình, một chiều mảng là hầu như luôn luôn thua kém một số cấu trúc dữ liệu khác như đề xuất ở đây một mảng danh sách các mảng. Nhưng tôi có thể bị định kiến ​​trước các mảng đa chiều :) – EBGreen

Các vấn đề liên quan