2012-01-31 22 views
5

Tôi đã đọc qua tài liệu hướng dẫn sử dụng container.Map của Matlab để xây dựng một cái gì đó tương tự như từ điển Python, nhưng đang chạy vào một số vấn đề và hy vọng ai đó có thể làm sáng tỏ.MATLAB: mở rộng danh sách giá trị trong đối tượng container.Map

Có cách nào để mở rộng nội dung của danh sách giá trị được ánh xạ tới một khóa nhất định không? ví dụ: giả sử bản đồ "bản đồ", khóa "1234", tôi có giá trị là "1.0".

map(1234) = 1.0 

tôi muốn mở rộng các giá trị danh sách tới [1.0 2.0], và cách tôi cố gắng để làm điều này là

map = containers.Map(1234,1.0) 
map(1234) = [map(1234) 2.0] 

nhưng tôi nhận được một lỗi nói rằng "Lỗi sử dụng containers.Map/ Loại giá trị được chỉ định không khớp với loại được mong đợi cho vùng chứa này ".

Tôi không thể kết hợp các mảng làm giá trị cho khóa bản đồ?

Rất cám ơn!

Trả lời

7

Mảng không được hỗ trợ tốt nếu ValueType là 'bất kỳ'. Có vẻ như vấn đề không phải là kỹ thuật bạn đang sử dụng để mở rộng mà là loại khóa hoặc giá trị.

Khi bạn sử dụng hàm tạo có khóa và giá trị, nó sẽ nhập khóa và giá trị loại từ các giá trị được truyền vào. Nếu giá trị là vô hướng kép, nó sẽ nhập loại 'double'. Điều đó không hỗ trợ mảng nonscalar.

>> map = containers.Map(1234, 1.0); 
>> disp(map.ValueType) 
double 

Giá thầu mặc định.Mẫu xây dựng sẽ có KeyType 'char' và ValueType 'any'. Điều đó sẽ có hành vi mở rộng mà bạn muốn, nhưng bạn phải sử dụng các phím char thay thế. Sử dụng biểu mẫu hàm tạo để đặt rõ ràng các loại khóa và giá trị thành 'double' và 'any' và nó sẽ hoạt động theo cách bạn muốn.

map = containers.Map('KeyType','double', 'ValueType','any'); 
map(1234) = 1.0; 
map(1234) = [map(1234) 2.0]; 
+0

cảm ơn bạn Andrew, cách tôi khởi tạo là như thế này: – JoeMcG

+0

cảm ơn bạn Andrew, cách tôi khởi tạo là như thế này: 'bản đồ = containers.Map (1234,1.0) ' là nó cũng có thể lập chỉ mục trong mảng này mà không sao chép bản đồ ('1234') sang biến mới không? – JoeMcG

+0

Lỗi của tôi - có vẻ như ValueType 'double' chỉ chấp nhận vô hướng nhân đôi làm giá trị. Tôi có thể tái sản xuất. Thay đổi nó để có ValueType 'any' bằng cách sử dụng hàm gọi constructor trong câu trả lời của tôi, hoặc bằng cách khởi tạo với một mảng không giống như 'map = containers.Map (1234, [1.0 2.0]);' và nó sẽ hoạt động. –

Các vấn đề liên quan