2012-02-20 7 views
5

Dưới đây là một đoạn mã, cho thấy những gì tôi muốn và lỗi, rằng sau:Trong Matlab, tôi có thể truy cập vào một phần tử của mảng không, đó là giá trị của một container.Map?

a = [1, 2]; 
m = containers.Map('KeyType','char', 'ValueType','any'); 
m('stackoverflow.com') = a; 
pull_the_first_element_of_the_stored_array = m('stackoverflow.com')(1); 
??? Error:()-indexing must appear last in an index expression. 

Làm thế nào để truy cập vào một phần tử của mảng, mà là ở biến một giá trị của một đối tượng bản đồ? tôi có thể làm điều này:

temp = m('stackoverflow.com'); 
pull_the_first_element_of_the_stored_array = temp(1); 

Nhưng tôi không muốn tạo ra một mảng trung gian duy nhất để kéo một giá trị duy nhất ra khỏi nó.

EDIT: Đây là bản sao của How can I index a MATLAB array returned by a function without first assigning it to a local variable? Câu trả lời là có.

+1

bản sao có thể có của [Làm thế nào tôi có thể lập chỉ mục mảng MATLAB được trả về bởi một hàm mà không cần gán nó trước một biến cục bộ?] (Http://stackoverflow.com/questions/3627107/how-can-i-index-a -matlab-array-trả về-by-a-function-without-first-assigning-it) – gnovice

+0

@gnovice Thật vậy. Bạn có thể trả lời, chỉ vào giải pháp của bạn? Sau đó tôi sẽ chấp nhận câu trả lời của bạn và bỏ phiếu để đóng câu hỏi. –

Trả lời

1

Mặc dù câu hỏi này là một bản sao của this previous question, tôi cảm thấy bắt buộc phải chỉ ra một sự khác biệt nhỏ giữa những vấn đề họ đang giải quyết, và cách my previous answer có thể được điều chỉnh một chút ...

Câu hỏi trước giải quyết cách giải quyết vấn đề cú pháp liên quan đến việc thực hiện cuộc gọi hàm ngay lập tức bằng thao tác lập chỉ mục trên cùng một dòng. Câu hỏi này thay vì giao dịch với hai hoạt động lập chỉ mục ngay lập tức theo nhau trên cùng một dòng. Hai giải pháp từ câu trả lời khác của tôi (sử dụng SUBSREF hoặc một hàm helper) cũng được áp dụng, nhưng có thực sự là một cách khác để sử dụng SUBSREF kết hợp hai hoạt động lập chỉ mục, như vậy:

value = subsref(m,struct('type','()','subs',{'stackoverflow.com',{1}})); 

Lưu ý cách chỉ số tuần tự các bản đăng ký 'stackoverflow.com'1 được kết hợp thành một mảng ô để tạo ra 1-by-2 structure array để chuyển đến SUBSREF. Nó vẫn là một lớp lót xấu xí, và tôi vẫn sẽ chủ trương sử dụng giải pháp biến tạm thời để có thể đọc được.

6

Đây là một trường hợp khác mà bạn có thể gặp giới hạn cú pháp với các hàm trợ giúp nhỏ. EG:

getFirst = @(x)x(1); 

pull_the_first_element_of_the_stored_array = getFirst(m('stackoverflow.com')); 

Điều này vẫn cần hai dòng, nhưng bạn thường có thể sử dụng lại định nghĩa hàm. Tổng quát hơn, bạn có thể viết:

getNth = @(x, n) x(n); 

Và sau đó sử dụng:

getNth (m('stackoverflow.com'),1);