2010-09-11 20 views
28

Đối với mọi tình huống đảm bảo việc sử dụng một mảng ... có một bộ sưu tập tuyệt vời với các lợi ích. Có bất kỳ trường hợp sử dụng cụ thể cho mảng nào nữa trong .NET không?Có mảng trong .NET mất ý nghĩa của chúng?

+0

Tôi nghĩ tốc độ nhưng tôi không chắc chắn. –

+8

Câu trả lời hay, * Chris T *. Giữ công việc tốt –

Trả lời

34

Gửi/nhận dữ liệu với độ dài cụ thể đến trong đầu, ví dụ: Cổng nối tiếp, yêu cầu web, yêu cầu FTP. Về cơ bản các công cụ hoạt động ở mức thấp hơn trong hệ thống. Ngoài ra, hầu hết các Bộ sưu tập đang sử dụng một mảng để lưu trữ (Ngoại lệ đáng chú ý: LinkedList<T>). Bộ sưu tập chỉ là một lớp trừu tượng khác.

+0

Ổ cắm TCP/IP cũng xuất hiện trong đầu, nhưng chúng có thể được xử lý một cách thanh lịch hơn bởi một luồng. –

+2

Các luồng cũng liên quan đến một 'byte []'. – Femaref

+0

Tôi muốn nói * gần như mọi bộ sưu tập đều sử dụng mảng để lưu trữ. Không phải là một 'LinkedList ', ví dụ. –

2

Có? Bất cứ lúc nào tôi có một loại mà nội bộ duy trì một bộ sưu tập kích thước cố định của các mặt hàng, tôi sử dụng một mảng vì nó là nhanh nhất để lặp lại và đòi hỏi bộ nhớ ít nhất. Không có ý nghĩa khi sử dụng một số List<T>, Queue<T>, v.v. nếu bạn không cần những tính năng đó.

5

Có, chắc chắn vẫn còn sử dụng cho mảng. Một số phương thức vẫn cần mảng.

Ví dụ:

string[] items = "a,b;c:d".Split(new char[]{',',';',':'}); 

Nó vẫn là cách đơn giản nhất để giữ một loạt các mặt hàng, và sự lựa chọn số một cho đến khi bạn cần một số tính năng đặc biệt, như cho sự phát triển năng động chẳng hạn.

6

Mảng hữu ích vì chúng luôn tuyến tính trong bộ nhớ và hoạt động nhanh. Ví dụ tôi có thể lấy byte[] và nguyên soái trực tiếp vào một cấu trúc mà không gặp bất kỳ vấn đề gì nhưng một List<T> sẽ phải được chuyển đổi thành một mảng đầu tiên theo như tôi biết.

1

Đó là một câu hỏi hợp lý, nhưng câu trả lời chắc chắn là chúng vẫn hữu ích. Tốc độ là một lý do, sự đơn giản cho các kích thước cố định là khác. Nhưng tôi nghĩ điều quan trọng nhất là sự linh hoạt. Nó cung cấp cho bạn một cơ sở tốt đẹp để thiết kế bộ sưu tập của riêng bạn, được hỗ trợ bởi một mảng đơn giản, nếu bạn cần nó.

5

Không có chúng vẫn có cách sử dụng và luôn được xem xét. Hãy nhớ rằng các mảng là các biểu diễn rất cơ bản về độ dài cố định vì vậy chúng rất nhanh và hầu hết các ngôn ngữ đều hiểu chúng tùy thuộc vào loại được sử dụng trong mảng.

Bạn cần xác định kích thước mảng tại thời điểm tạo và không thể thay đổi kích thước của nó sau này. Danh sách và những thứ khác có thể phát triển khi cần thiết, bổ sung thêm chi phí liên quan đến cấp phát bộ nhớ.

Danh sách và các loại khác rất hữu ích vì chúng có thể làm được nhiều nhưng đôi khi bạn không cần tất cả những chi phí bổ sung đó để một mảng là tất cả những gì bạn cần.

Giống như lái xe 4x4 vì bạn nghĩ một ngày nào đó bạn có thể cần phải ra khỏi đường mặc dù có 99,9% cơ hội bạn sẽ ở trên những con đường bình thường. Mảng sẽ là chiếc xe cơ bản và một danh sách ví dụ sẽ là một chiếc 4x4 ... nó làm mọi thứ khác mà một chiếc xe có thể làm (một chiếc mui xe có thể sử dụng hầu hết các bộ phận tương tự) nhưng với chi phí gas, chi phí, có thể không phù hợp trong các ô đỗ xe nhất định, vv ...

mảng = hiệu suất và khả năng tương thích

Danh sách (hoặc cơ quan đại diện khác) = dễ sử dụng với chi phí hiệu suất và khả năng tương thích

+1

Tôi sẽ đảo ngược sự tương tự; Mảng là chiếc xe 4x4 hoặc F1 với rất nhiều sức mạnh của ngựa mà cũng giết bạn dễ dàng hơn nhiều khi bạn không có kinh nghiệm xử lý chúng; trong khi Danh sách là Xe ô tô gia đình hoặc Xe hơi thành phố cung cấp nhiều tính năng an toàn với chi phí ít linh hoạt hơn (ví dụ: không thể ra ngoài thuận tiện). –

+0

@ Ryan Ryan đó là một sự tương tự vì vậy tôi đoán bạn có thể quay nó theo những cách khác :) Tôi đồng ý với bạn mất là tốt. – Kelsey

+0

@Lie: Trong mã sản xuất, danh sách được liên kết có xu hướng ít phổ biến hơn. Nếu bạn đã từng viết loại vùng chứa của riêng mình, hãy bắt đầu bằng một mảng và chỉ thêm các tính năng danh sách được liên kết nếu bạn thực sự cần chúng. (Tôi đã thực hiện các phiên bản lai sử dụng danh sách các phần tử mảng liên kết; thuật toán cần sự kết hợp, nhưng cấu trúc dữ liệu không thể tái sử dụng được cho những thứ khác. :-)) –

1

không, Array sẽ không lỏng lẻo tầm quan trọng của nó.

Như khi bạn biết về không có mặt hàng trước, bạn có thể truy cập mảng giúp bạn truy cập rất nhanh.

2- Trong đồ thị theroy, vẫn còn khi bạn lưu trữ thông tin về liên kết giữa đỉnh, bạn có thể implment bằng cách sử dụng mảng đó là nhanh hơn so với thực hiện LinkList.

3- Một số phương thức như string.split trả về mảng.

bạn có thể sử dụng giữ chỗ này tĩnh tuyệt vời của các mục trong một verity của các vấn đề máy tính

1

tôi sử dụng mảng để maniulate hình ảnh giống như trong lớp WritableBitmap.

2

Hai trường hợp tôi làm việc hàng ngày với mảng: Phân tích

  • ảnh. Hình ảnh hầu như luôn là mảng byte [] hoặc int [].
  • Giao tiếp phần cứng bên ngoài. Hầu hết các thiết bị yêu cầu mảng cấu trúc hoàn hảo để gửi/nhận tin nhắn.
3

Khá ngoài mọi thứ khác, nhiều người trong những lớp học tập tuyệt vời mà bạn tham khảo được thực hiện sử dụng mảng. Bạn có thể không sử dụng chúng một cách rõ ràng, nhưng bạn đang sử dụng tải chúng và chương trình của bạn tốt hơn cho nó. Điều đó có nghĩa là các mảng phải bằng ngôn ngữ (hoặc các bộ sưu tập được triển khai trực tiếp sử dụng nhiều mã gốc, điều này sẽ trở nên hấp dẫn hơn).

1

Một điều tôi phải nói với bạn Mảng là khối xây dựng cho bất kỳ ngôn ngữ lập trình nào. Nếu bạn muốn khai báo một kho lưu trữ có nhiều hơn một phần tử, các mảng là tùy chọn cơ bản cho bạn.

Ví dụ: Danh sách.

Nếu bạn thấy định nghĩa của danh sách, nó thực sự nắm giữ

T [] mục

Chỉ cần sử dụng Reflector và tìm định nghĩa của danh sách, bạn sẽ ngạc nhiên khi tìm hiểu Danh sách được thực sự là một mảng . Trong .NET hầu hết các collection khác ngoài LinkedList về cơ bản là một thực thi Array. Họ sử dụng Array vì lưu trữ và truy hồi nhanh chóng của nó.

Tôi đồng ý rằng Array có giới hạn Cập nhật hoặc Xóa, nếu trọng tâm chính của bạn là lưu trữ hơn tốc độ, bạn có thể truy cập Danh sách được liên kết.

4

Có mảng bị mất (một số) ý nghĩa không?

Có. Đối với nhiều tác vụ yêu cầu 'bảng' các mặt hàng, giờ đây có các giải pháp linh hoạt và hữu ích hơn như List<>IEnumerable<>.

Các mảng bị mất tầm quan trọng của chúng?

số Họ là những hình thức nhanh nhất của lưu trữ và chúng được sử dụng 'dưới mui xe' trong hầu hết các lớp học tập, System.String, vv

Vì vậy, mảng đã ngày càng trở nên cấp thấp, và một lập trình viên ứng dụng sẽ sử dụng chúng trực tiếp ít thường xuyên hơn.

1

Bạn nghĩ gì về lĩnh vực ủng hộ đằng sau nhiều bộ sưu tập lạ mắt này?