Có, nhưng không theo cách mà bạn muốn. List<T>
đảm bảo rằng các phần tử của nó được lưu trữ liên tục.
Mảng là loại tham chiếu, vì vậy các tham chiếu được lưu trữ gọn gàng như bảo đảm List<T>
. Tuy nhiên, bản thân các mảng được phân bổ riêng biệt và nơi chúng được lưu trữ không liên quan gì đến danh sách. Nó chỉ quan tâm đến các yếu tố của nó, các tham chiếu.
Nếu bạn yêu cầu điều đó thì bạn chỉ cần sử dụng một mảng lớn và duy trì dữ liệu ranh giới.
EDIT: mỗi bình luận của bạn:
Các mảng bên trong luôn 9 ký tự.
Vì vậy, trong trường hợp này, sự kết hợp bộ nhớ cache có thể là một vấn đề vì các mảng phụ quá nhỏ. Bạn sẽ được nhảy xung quanh rất nhiều trong bộ nhớ nhận được từ một mảng đến tiếp theo, và tôi sẽ chỉ đưa bạn về từ của bạn về độ nhạy hiệu suất của mã này.
Chỉ cần sử dụng đa chiều nếu bạn có thể. Điều này tất nhiên giả định bạn biết kích thước hoặc bạn có thể áp đặt một kích thước tối đa trên đó.
Có thể giao dịch một số bộ nhớ để giảm độ phức tạp/thời gian và chỉ cần đặt kích thước tối đa cho N
? Sử dụng mảng đa chiều (nhưng không sử dụng sau) là cách duy nhất bạn có thể đảm bảo phân bổ liền kề.
CHỈNH SỬA 2:
Cố gắng giữ câu trả lời đồng bộ với nhận xét. Bạn nói rằng kích thước tối đa của thứ nguyên đầu tiên là 9! và, như trước đây, kích thước của thứ nguyên thứ hai là 9.
Phân bổ tất cả lên phía trước. Bạn đang giao dịch một số bộ nhớ cho thời gian. 9! * 9 * 2/1024/1024 == ~ 6,22MB.
Như bạn nói, Danh sách có thể tăng lên với kích thước đó, vì vậy trường hợp xấu nhất bạn lãng phí một vài MB bộ nhớ. Tôi không nghĩ rằng nó sẽ là một vấn đề, trừ khi bạn có kế hoạch chạy mã này trong lò nướng bánh. Chỉ cần phân bổ bộ đệm như một mảng lên phía trước và bạn tốt.
Tôi đoán tôi có thể khai báo Danh sách và chỉ theo dõi thủ công ranh giới. Điều đó sẽ được lưu trữ trong bộ nhớ liền kề, phải không? –
David
Yup, đó là những gì tôi gợi ý. Đó là cách duy nhất để làm điều này. Chỉ tò mò thôi; tại sao bạn cần chúng được tiếp giáp và hành động giống như một mảng lớn ở nơi đầu tiên? Suy nghĩ của tôi là nhảy giữa các mảng sẽ không quan trọng nhiều như nó sẽ xảy ra không thường xuyên khi so sánh với số lượng nhảy xảy ra giữa các phần tử khi lặp lại các mảng riêng lẻ. –
Nó dành cho lớp AI. Dữ liệu không tiếp giáp sẽ ảnh hưởng đến thời gian thực hiện của thuật toán, và làm tổn thương lớp của tôi :) – David