2011-07-17 43 views
8

Tôi muốn tạo mảng 2 chiều, không biết kích thước của thứ nguyên đầu tiên.Làm cách nào để tạo mảng chiều dài động 2 chiều?

Ví dụ: tôi có một số hàng không xác định, khi tôi tạo một mảng. Mọi hàng đại diện cho một tài khoản. Exit 4 cột cho mỗi hàng: ID, tên, người dùng, mật khẩu

Tôi đã thử với mảng lởm chởm nhưng nó không phải là có thể có:

int[][] jaggedArray = new int[][3]; 

Ngoài ra tôi đã tìm kiếm ArrayList, thực hiện với các khóa học và một ít về Generics.

tôi đang tìm kiếm một giải pháp mà có thể cho phép thao tác dễ dàng dữ liệu như:

  • thêm vào danh sách, chọn, các yếu tố đầu vào
  • sử dụng các yếu tố trong cơ sở dữ liệu truy vấn
  • sử dụng như các thông số trong khác chức năng

Vì tôi là người mới trong .NET (C#) vui lòng cung cấp cho tôi các giải pháp mã, thay vì các giải pháp chung (tìm kiếm)

Trả lời

2

Không có những thứ như mảng chiều dài động trong .NET. Sử dụng một số List<> để thay thế.

Mọi giới hạn mảng cần được biết khi bạn khởi tạo mảng. Điều có thể khiến bạn bối rối là điều này có vẻ khác với các mảng bị lởm chởm, nhưng không phải vì nó là một mảng các mảng, khi bạn khởi tạo nó, nó sẽ là một mảng các mảng không được phục hồi (ví dụ: null references). Sau đó, bạn cần phải phân bổ từng mảng một lần nữa để sử dụng chúng.

17

IMO, kể từ khi "cột" được cố định, khai báo một lớp cho rằng:

public class Account 
{ 
    public int ID {get;set;} 
    public string Name {get;set;} 
    public string User {get;set;} 
    public string Password {get;set;} // you meant salted hash, right? ;p 
} 

bây giờ có một:

List<Account> list = new List<Account>(); 

này có mọi thứ bạn cần:

thêm vào danh sách, chọn, các yếu tố đầu vào

list.Add vv

sử dụng các yếu tố trong cơ sở dữ liệu truy vấn sử dụng như các thông số trong các chức năng khác

mơ hồ mà không cần biết thêm, nhưng bạn có thể vượt qua một trong hai Account hoặc invidual giá trị, hoặc toàn bộ danh sách.

+0

cảm ơn bạn. Tôi có một câu hỏi khác: Làm cách nào để khôi phục các giá trị thành viên của lớp cho một mục danh sách cụ thể? – user848568

+2

@user bạn có nghĩa là như 'danh sách [0] .Name'? –

+0

Trường hợp của tôi có một khác biệt nhỏ. Cả hai hàng và cột đều không được biết. Làm thế nào tôi có thể đạt được kết quả tương tự cho '2-D Mảng'? – barnes

0

Miễn là tôi biết, chúng tôi không thể khởi tạo mảng mà không biết kích thước của nó. Tại sao bạn không thử một Array of List? Như thế này:

List<int>[] a = new List<int>[yourDesireColumnNumber]; 

Với danh sách, thêm, lựa chọn, yếu tố đầu vào là không đáng kể. Nếu bạn muốn cho nó như là tham số trong các hàm khác, chỉ cần định nghĩa Type.

+0

Bạn không có nghĩa là một danh sách các mảng cố định int, không phải là một mảng cố định của danh sách của int? –

+3

@Scrum là đúng - nếu bạn chọn phương pháp này (và tôi sẽ không; p) nó sẽ là 'Danh sách ', không phải là' Danh sách []' –

+0

Bạn nên thử nó trước khi đánh giá nó. Đó là một Array of List . Nhân tiện, cách tiếp cận của Marc rất tuyệt. ;) Tôi học được từ đó. –

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