Không có cách nào dễ dàng để làm điều này bởi vì trong tình huống mà bạn đang mô tả, không có gì ngăn chặn sự double[]
mảng trong danh sách là không bị các kích cỡ khác nhau, mà sẽ không tương thích với mảng hình chữ nhật hai chiều. Tuy nhiên, nếu bạn đang ở vị trí để đảm bảo double[]
mảng tất cả đều có chiều tương tự, bạn có thể xây dựng mảng hai chiều của bạn như sau:
var arr = new double[ret.Count(),ret[0].Count()];
for(int i=0; i<ret.Count(); i++) {
for(int j=0; j<ret[i].Count(); j++)
arr[i,j] = ret[i][j];
}
này sẽ tạo ra một lỗi thời gian chạy nếu một trong các double[]
các mảng trong danh sách sẽ ngắn hơn danh sách đầu tiên và bạn sẽ mất dữ liệu nếu bất kỳ mảng nào lớn hơn mảng đầu tiên.
Nếu bạn thực sự quyết định lưu trữ một mảng răng cưa trong một mảng hình chữ nhật, bạn có thể sử dụng giá trị "ma thuật" để cho biết không có giá trị ở vị trí đó. Ví dụ:
var arr = new double[ret.Count(),ret.Max(x=>x.Count())];
for(int i=0; i<ret.Count(); i++) {
for(int j=0; j<arr.GetLength(1); j++)
arr[i,j] = j<ret[i].Count() ? ret[i][j] : Double.NaN;
}
Trên ghi chú biên tập, tôi nghĩ đây là ý tưởng rất tồi ™; khi bạn sử dụng mảng chữ nhật, bạn phải kiểm tra Double.NaN
mọi lúc. Hơn nữa, nếu bạn muốn sử dụng Double.NaN
làm giá trị hợp pháp trong mảng? Nếu bạn có một mảng lởm chởm, bạn chỉ nên để nó như là một mảng răng cưa.
Nguồn
2012-03-19 17:56:01
nghe như bạn muốn một mảng * lởm chởm * không phải mảng 2D - bạn có chắc đó là yêu cầu của bạn vì tất cả các mảng có cùng độ dài không? – BrokenGlass
nó có lẽ sẽ thanh lịch hơn để thay đổi mã cần mảng đa chiều. – Jodrell
Có lẽ bạn nên đăng mã giải thích chính xác những gì bạn muốn và giải thích lý do bạn muốn theo cách đó. – Bernard