2009-02-27 51 views

Trả lời

133

Hãy xem Generic Lists.

+8

+1 để đẩy anh ta hướng tới lớp sưu tập –

+4

Câu hỏi (mặc dù ngắn và không mô tả) không hỏi về danh sách chung - Câu hỏi có thể hỏi về 'dynamic []' https://msdn.microsoft.com /en-GB/library/dd264736.aspx (mảng các loại động) hoặc 'ExpandoObject' https://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(v=vs.110).aspx Tôi có thể -1 câu trả lời cho không đề cập đến những –

+0

@ LukeTO'Brien này, động lực đã được giới thiệu trong C# 4.0, được phát hành một năm sau khi câu hỏi này ban đầu được hỏi. OP có lẽ đã hỏi về cấu trúc dữ liệu có thể thay đổi lại như https://en.wikipedia.org/wiki/Dynamic_array –

38

List<T> cho kiểu được nhập mạnh hoặc ArrayList nếu bạn có .NET 1.1 hoặc yêu thích để truyền biến.

+1

+1 lời giải thích hay. –

70

Mở rộng câu trả lời của Chris và Migol bằng mẫu mã.

Sử dụng một mảng

Student[] array = new Student[2]; 
array[0] = new Student("bob"); 
array[1] = new Student("joe"); 

Sử dụng một danh sách chung. Dưới mui xe, lớp <T> sử dụng một mảng để lưu trữ nhưng thực hiện theo cách thức cho phép nó phát triển hiệu quả.

List<Student> list = new List<Student>(); 
list.Add(new Student("bob")); 
list.Add(new Student("joe")); 
Student joe = list[1]; 
+2

ví dụ này là một nửa xấu, bởi vì cả hai chúng tôi đã nói về ArrayList – Migol

+28

@Migol, nó cũng là một nửa tốt;) – JaredPar

+8

Câu trả lời này tốt hơn của bạn @Migol, bởi vì điều này cho thấy làm thế nào để thực sự sử dụng Danh sách <> thay vì chỉ đề cập đến nó làm từ khóa. "half-bad" -> "half-good" -> tốt – fhugas

38

mảng Đôi khi đơn giản được ưa thích để Lists Generic, vì chúng là thuận tiện hơn (hiệu suất tốt hơn cho tính toán tốn kém -Numerical Đại số ứng dụng chẳng hạn, hoặc để trao đổi dữ liệu với phần mềm thống kê như R hoặc Matlab)

trong trường hợp này bạn có thể sử dụng phương thức ToArray() sau khi bắt đầu Danh sách của bạn tự động

List<string> list = new List<string>(); 
list.Add("one"); 
list.Add("two"); 
list.Add("three"); 

string[] array = list.ToArray(); 

Tất nhiên, điều này có ý nghĩa chỉ khi kích thước của mảng không bao giờ được biết đến cũng không cố định ex ante. nếu bạn đã biết kích thước của mảng tại một số điểm của chương trình thì tốt hơn nên khởi tạo mảng đó làm một mảng chiều dài cố định. (Nếu bạn lấy dữ liệu từ một ResultSet ví dụ, bạn có thể đếm kích thước của nó và bắt đầu một loạt các kích thước đó, động)

Kính trọng,

MJ

+1

Không đáng, miễn là bạn đang sử dụng trình chỉ mục. – aaimnr

+2

Arary không thuận tiện hơn (chúng cung cấp tập hợp con của giao diện Danh sách ) và cung cấp gần như cùng một hiệu suất, vì Danh sách sử dụng mảng thông thường bên dưới. Iteration cho 6000000 yếu tố: Danh sách/cho: 1971ms Array/cho: 1864ms (Benchmark từ http://stackoverflow.com/questions/454916/performance-of-arrays-vs-lists) – aaimnr

+5

Nếu bạn * có * để truyền một mảng tới một giao diện sau đó nó * phải * là một mảng. Tạo danh sách dễ dàng hơn nhiều và sau đó biến nó thành một mảng ngay trước khi bạn vượt qua nó. Tôi thích câu trả lời này nhiều hơn những người khác vì nó giải quyết câu hỏi! –

1

Sử dụng danh sách mảng mà thực sự là triển khai mảng. Nó lấy mảng ban đầu của kích thước 4 và khi nó được đầy đủ, một mảng mới được tạo ra với kích thước gấp đôi của nó và dữ liệu của mảng đầu tiên được sao chép vào mảng thứ hai, bây giờ mục mới được chèn vào mảng mới. Ngoài ra tên của mảng thứ hai tạo ra một bí danh của đầu tiên để nó có thể được truy cập bằng tên giống như trước và mảng đầu tiên bị xử lý

0

động mảng Ví dụ:

Console.WriteLine("Define Array Size? "); 
int number = Convert.ToInt32(Console.ReadLine()); 

Console.WriteLine("Enter numbers:\n"); 
int[] arr = new int[number]; 

for (int i = 0; i < number; i++) 
{ 
    arr[i] = Convert.ToInt32(Console.ReadLine()); 
} 
for (int i = 0; i < arr.Length; i++) 
{ 
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString()); 
} 
Console.ReadKey();