특정 필드가있는 구조체 배열이 있습니다. 이제 특정 필드가 비어있는 모든 행을 필터링하려고합니다.특정 필드가 비어있을 때 구조체 배열의 데이터를 필터링하는 방법
은 기본적으로 제가 지금 가지고있는 것은 :
data(1).elem1 = 1;
data(1).elem2 = 2;
data(1).elem3 = 3;
data(2).elem1 = 4;
data(2).elem3 = 6;
data(3).elem1 = 7;
data(3).elem2 = 8;
data(4).elem1 = 9;
data(4).elem2 = 10;
data(4).elem3 = 11;
data(5).elem1 = 9;
data(5).elem3 = 11;
data
fields = {'elem2,elem3'};
data(any(~cellfun(@(x) any(~isempty(x)), {data.('elem2'); data.('elem3')}))) = [];
이 괜찮 작동합니다. 그러나 특별히 {data.('elem2'); data.('elem3')}
을 표현하고 싶지 않습니다. 간단히 변수 fields
을 사용하고 싶습니다.
필드 주위를 반복하여 {data.('elem2'); data.('elem3')}
을 포함하는 임시 변수를 만들 수 있습니다. 그러나 나는 이것을하지 않는 것을 선호한다. 나는 더 영리한 방법이 있다고 생각하기 때문에 나는 현재하고있는 것처럼 더 효율적으로 할 수 없는지 궁금해하고 있습니다.
'fields'를 정의하는 데 실수가 있습니다. 'fields = { 'elem2', 'elem3'};'이어야합니다. 그런 다음 당신은'data (any (cellfun (@ (x) isempty (x), {data. (fields {1}), data. (필드 {2})}})) = [];' 하나의 추가 '임의'및 2 개의 추가 부정)! – erfan