본문으로 바로가기

MATLAB Structure filedname 통해 반복(loop)문 돌리기

category IT 기타 2021. 5. 11. 16:05

MATLAB Structure filedname 통해 반복(loop)문 돌리기

 

MATLAB 같은 경우 대부분 공식 홈페이지에서 잘 설명해주지만 가끔 찾기 힘든 것이 있습니다. 저같은 경우 그 중 하나가 MATLAB structure구조의 filedname 통해 반복문 돌리는 것이였습니다. 여기서는 struct 구조 대상으로 진행한 것이지만, 다른 data 구조에서도 동일하게 적용가능할 것이라 생각합니다.

 

예시를 통해 반복문 돌리는 방법을 알아보도록 하겠습니다.

 

 

다음과 같이 struct_example 을 정의하면 

struct_example = struct( "one",{1} , "two" , {2} , "three", 3  )

이 struct_example 은 다음과 같이 one, two , three field를 포함합니다. 

 

 

 

여기서 fieldname을 fieldnames를 다음과 같이 받아옵니다.

field_name = fieldnames(struct_example)

 

* n x 1 cell 배열말고 1 x n cell로 되어 있을 때 원하는 대로 반복문이 돌아가므로 transpose시켜줍니다.

field_name = transpose(field_name)

 

 

여기서 field_name을 iterator로 이용하여 다음과 같이 반복문을 실행하지만 "element"은(는) 인식할 수 없는 필드 이름입니다. 라는 오류가 발생합니다.

for element = field_name
    disp(struct_example.element)
end

 

 

여기서 반복문을 원하는 대로 이용하기 위해서는 다음과 같이 소괄호()와 인덱스 {}를 이용해 작성해야 합니다.

for element = field_name
    disp(struct_example.(element{1}))
end

 

 

정상적으로 filed 'one', 'two', 'three'에 해당하는 값인 1,2,3 이 차례대로 disp ( = print) 되었습니다.

 

* struct 안에 struct가 있는 구조에서도 활용가능합니다.

struct_element1 = struct( "one",{1} , "two" , {2} , "three", 3  );
struct_element2 = struct( "four",{4} , "five" , {2} , "six", 3  );
struct_example = struct( "element1", struct_element1, "element2", struct_element2)

for element = {'element1','element2'} # 중괄호로 나타내기
    disp(  struct_example.(element{1}))
end

 

 

* Tistory 코드 블럭에서 MATLAB 코드블럭이 존재하지 않아 Python 코드블럭을 이용했습니다. 이 페이지에 나온 코드 그대로 MATLAB에 이용하시면 됩니다.