2016-09-20 3 views
1

개체 구조의 각 요소에 대해 개별 배열로 변환해야하는 "object"구조 배열 인 OBJECT_ARRAY이 있습니다. 이것은 arrayfun을 사용하여 수행 할 수 있습니다. 단순히 OBJECT_ARRAY(k).item1을 심판하는 것보다 지루한 일이지만, Mathworks가 그것을 선택하는 방법입니다.arrayfun의 "Reverse"

오늘이 개별 배열을 사용하여 각 요소에 대해 상응하는 파생 값인 newItem을 계산했으며이를 구조의 원래 배열에 추가해야합니다. 그래서 배열은 newItems입니다.

OBJECT_ARRAY에 각 개체에 대한 할당을 수행하는 간단한 방법이 있으므로 모든 인덱스 k에 대해 (실제로) OBJECT_ARRAY(k).newItem = newItems(k)?

버전 2015a를 사용하고 있습니다.

+1

[매트랩 구조체 배열의 각 요소에 하나 개의 필드를 업데이트]의 가능한 복제 (http://stackoverflow.com/questions/9303070/updating-one-field-in-every-element-of-a -matlab-struct-array) – beaker

+0

나는 속는 사람으로 닫기로 결심했으나 @Suever는 내가 그것을 표시하는 동안 더 완전한 대답을 추가했다. 속임수 표 제거. – beaker

+1

(의사) 코드에 대한 많은 마크 다운 스타일을 사용하지 말고 지정된 코드를 사용하십시오. 그런 식으로 사람들은 실제로 무엇이 코드인지 이해하지 못합니다. – Adriaan

답변

5

이런 경우에는 arrayfun이 필요하지 않습니다.

값을 얻으려면 비 스칼라 struct 또는 개체의 도트 색인 생성이 comma-separated list이됩니다. []으로 둘러 쌓으면 모든 값을 수평 적으로 배열로 연결합니다.

array_of_values = [OBJECT_ARRAY.item1]; 

아니면이 연결될 수없는 모든 다른 크기를 경우, 가 할당, 다시 쉼표를 사용하려면 셀 어레이

array_of_values = {OBJECT_ARRAY.item1}; 

를 사용하여 왼쪽에 목록을 분리 과제의 오른쪽에. 먼저 새 값을 셀 배열에 고정하여 {:}을 사용하여 쉼표로 구분 된 목록으로 자동 변환합니다.

items = num2cell(newitems); 
[OBJECT_ARRAY.item1] = items{:};