Tôi vừa mới bắt đầu học C# và trong phần giới thiệu về mảng chúng cho thấy cách thiết lập biến như một mảng nhưng có vẻ như phải chỉ định độ dài của mảng khi gán, nếu tôi không biết chiều dài của mảng?Mảng có chiều dài không xác định trong C#
Trả lời
Mảng phải được gán độ dài. Để cho phép bất kỳ số phần tử nào, hãy sử dụng lớp List
.
Ví dụ:
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
var yummy = new List<string>();
while(person.FeelsHappy()) {
yummy.Add(person.GetNewFavoriteFood());
}
Console.WriteLine("Sweet! I have a list of size {0}.", list.Count);
Console.WriteLine("I didn't even need to know how big to make it " +
"until I finished making it!");
Bạn có thể tạo một mảng với kích thước thiết lập để một biến, tức là
int size = 50;
string[] words = new string[size]; // contains 50 strings
Tuy nhiên, kích thước mà không thể thay đổi sau này, nếu bạn quyết định bạn cần 100 từ. Nếu bạn cần kích thước thật sự năng động, bạn sẽ cần sử dụng một loại cấu trúc dữ liệu khác. Hãy thử List
.
Đây là tất cả null. Hãy thử 'string [] words = new string (',', size - 1) .Split (',');' Bây giờ chúng được khởi tạo với '" "'. – Bitterblue
Sử dụng ArrayList
nếu trong .NET 1.x hoặc List<yourtype>
nếu trong .NET 2.0 hoặc 3.x.
Tìm kiếm chúng trong System.Collections
và System.Collections.Generics
.
Sử dụng List<>
để tạo một 'mảng' có chiều dài không xác định.
Sử dụng List<>.ToArray()
để trả về một mảng thực và không phải là List
.
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
thử một danh sách chung thay vì mảng
Bạn cũng có thể muốn xem xét Dictionarys nếu dữ liệu của bạn là duy nhất, Điều này sẽ cung cấp cho bạn hai cột để làm việc với.
Tên người dùng, Tổng hóa đơn
nó cung cấp cho bạn rất nhiều công cụ được tích hợp để tìm kiếm và cập nhật chỉ giá trị.
Tóm lại, vui lòng sử dụng Bộ sưu tập và Generics.
Đó là một bắt buộc đối với bất kỳ nhà phát triển C#, nó có giá trị dành thời gian để học hỏi :)
Một chút thông tin background:
Như đã nói, nếu bạn muốn có một bộ sưu tập năng động của sự vật, sử dụng một List<T>
. Bên trong, Danh sách cũng sử dụng một mảng để lưu trữ. Mảng đó có kích thước cố định giống như bất kỳ mảng nào khác. Khi một mảng được khai báo là có kích thước, nó không thay đổi. Khi bạn thêm một mục vào một số List
, nó sẽ được thêm vào mảng. Ban đầu, các List
bắt đầu với một mảng mà tôi tin rằng có chiều dài 16. Khi bạn cố gắng thêm mục thứ 17 vào List
, điều xảy ra là một mảng mới được cấp phát, đó là (tôi nghĩ) gấp đôi kích thước của cũ, vì vậy 32 mặt hàng. Sau đó, nội dung của mảng cũ được sao chép vào mảng mới. Vì vậy, trong khi List
có thể xuất hiện động với người quan sát bên ngoài, nội bộ nó cũng phải tuân thủ các quy tắc.Và như bạn có thể đoán, việc sao chép và phân bổ các mảng không phải là miễn phí, vì vậy bạn nên nhắm đến số ít nhất có thể và để làm điều đó, bạn có thể chỉ định (trong hàm khởi tạo của List
) một giá trị ban đầu kích thước của mảng, trong một kịch bản hoàn hảo chỉ đủ lớn để chứa mọi thứ bạn muốn. Tuy nhiên, đây là tối ưu hóa vi mô và nó không chắc nó sẽ quan trọng với bạn, nhưng nó luôn luôn là tốt đẹp để biết những gì bạn đang thực hiện .
Đây chính xác là thông tin tôi đã theo dõi. Phát hiện và nhiều thông tin hơn hầu hết các câu trả lời khác. +1 –
Như đã nêu chi tiết ở trên, Danh sách chung <> là cách tốt nhất để thực hiện.
Nếu bạn bị kẹt trong .NET 1. *, thì bạn sẽ phải sử dụng lớp ArrayList thay thế. Điều này không có kiểm tra kiểu thời gian biên dịch và bạn cũng phải thêm phép đúc - lộn xộn.
Phiên bản kế thừa cũng đã triển khai các biến thể khác nhau - bao gồm các biến thể an toàn chủ đề.
- 1. Tạo mảng C# đối tượng có chiều dài không xác định?
- 2. Kích thước mảng (Chiều dài) trong C#
- 3. Có thể sử dụng sizeof() để xác định chiều dài mảng không?
- 4. Lấy mảng byte có chiều dài không xác định từ cửa hàng Java
- 5. mảng chiều dài Variable (VLA) trong C và C++
- 6. C, malloc() và chiều dài mảng
- 7. 2d chiều dài hàng/cột mảng C
- 8. Nhận chiều dài của mảng chuỗi không rõ chiều dài
- 9. Chiều dài mảng của mảng Array.pop() không?
- 10. Macro chiều dài mảng chung cho C?
- 11. Mảng Chiều dài trong Java
- 12. Không thể đọc chiều dài tài sản không xác định
- 13. Các mảng không có chiều dài trong VBScript
- 14. Chiều dài cố định chiều dài đệm trong haskell
- 15. MySQL Xác định chiều dài VarChar dài nhất
- 16. Tìm chiều dài của một Mảng nhân vật trong C
- 17. Chiều dài của đối tượng JavaScript === không xác định?
- 18. Xác định mảng trong C
- 19. Xác định chiều dài của một String Literal
- 20. Lấy chiều dài mảng của một mảng 2D trong Java
- 21. Pre xác định mảng đa chiều trong Excel VBA
- 22. Tính toán băm từ một luồng có độ dài không xác định trong C#
- 23. mảng chiều dài không so với con trỏ
- 24. Kiểm tra Chiều dài đa chiều Mảng với Javascript
- 25. C++ tại sao không có cái gì đó như chiều dài (mảng)?
- 26. xác định chiều dài chuỗi văn bản DB2
- 27. Cách tăng chiều dài của mảng
- 28. Lấy chiều dài của mảng JSON.Net
- 29. Làm cách nào để xác định chiều dài Sequelize.STRING?
- 30. Khởi tạo mảng không rõ ràng có độ dài không xác định
Điều gì xảy ra nếu hai chiều? –
'Danh sách myInts = Danh sách mới ();' có thể hoạt động. –
Nếu mảng phải được gán một độ dài, thì tại sao tôi có thể làm điều này: String [] arr = "test; the; values; now" .Split (';'); và nó chỉ xác định chiều dài? Tuy nhiên, tôi không thể lấy cùng một dòng mã đó và di chuyển biến khai báo sang một dòng khác. –