2

나는 몇 년 동안 익명으로 익숙해지면서 잠시 동안 나를 괴롭혔던 질문을하기 위해 계정을 만들었으며 대답을 찾을 수없는 것 같습니다. 나는 정말로, 정말로 시험해 보았다! 여기 간다 :벡터화 구조 필드 액세스 (또는 수정) matlab에? 심지어 가능할까요?

을 당신은 MATLAB 구조 배열이있는 경우 :

something(1).toSay = 'qwe'; 

something(2).toSay = 'asd'; 

something(3).toSay = 'zxc'; 

분야 toSay의이 3 개 항목의 재 할당을 벡터화 할 수있는 방법이 있습니까를?

something = magicFunction(something, [1:3], 'toSay', {'newString1','newString2','newString3'}) 

최종 결과의 존재처럼 :

something(2).toSay >> 'newString2' 

나는 setfield 기능과 함께 뭔가를 시도했지만, 그것이 작동 만들 수 없습니다. 이 질문으로 할려고하는 건 용 루프을 피하십시오.

질문 2 : 구조 배열이 아닌 셀 배열 인 경우 차이가 있습니까?

답변

0

대체 문자열을 셀 배열 내에 배치 한 다음 {:} 인덱싱을 사용하여 할당 오른쪽에 comma separated list을 만들 수 있습니다. 왼쪽에서 something(1:3).toSay은 이미 쉼표로 구분 된 목록을 만들므로 []에 묶어서 오른쪽의 값을 왼쪽의 해당 입력란에 할당 할 수 있습니다.

newvalues = {'newString1', 'newString2', 'newString3'}; 
[something(1:3).toSay] = newvalues{:}; 

참조 : Assigning output from a comma separated list와 구조체가있을 때 직접 쉼표로 구분 된 목록을 만들 수 없기 때문에 추가 단계가 필요합니다 그것을 구조체의 셀 배열을 만드는 두 번째 질문과 관련하여

Assigning to a comma separated list, 셀 배열 내에서 먼저 구조체 배열로 변환해야합니다.

sarray = [something{1:3}]; 
[sarray.toSay] = newValues{:}; 
something(1:3) = num2cell(sarray);