How to check if there is any field in structure?

조회 수: 150 (최근 30일)
Najmeh Eskandari
Najmeh Eskandari 2019년 2월 11일
댓글: Nicholas Ayres 2021년 4월 6일
Hi.
I have a structures with no field and want to check is there any field in it or no?
L1=struct();
isempty L1
the result is 0.I know that L1 is a struct with no field(not empty).
so i use:
L1=struct([])
but in this case the result is 0 too.
How can check is there any fields in an empty structure?
  댓글 수: 1
Nicholas Ayres
Nicholas Ayres 2021년 4월 6일
A misunderstanding of using functions in MatLab is shown in this question.
Read the next section of this comment if you don't see the issue.
When you put a space after a function name, matlab interprets the space-separated terms as char[] inputs to the function.
So these two function calls are synonymous:
isempty L1
isempty('L1')
and are NOT the same as:
isempty(L1)
which was intended. BE CAREFUL OF THIS!!
However the approach taken would still not produce the desired output (read the next section to find out why).
WHY the approach taken in the question would not work (even if done correctly).
However, assuming that this term HAD been written correctly, isempty(L1), this would still NOT have produced the desired result as "isempty" tests the dimensions of the struct array and NOT the number of fields that the contained structs have.
So:
L1 = struct();
isempty(L1) % = FALSE because the struct command produces a 1x1 struct array.
L1 = struct([]);
isempty(L1) % = TRUE because the struct command now produces a 0x0 struct array and NOT because of the number of fields.
If we were to do:
L1 = struct('hi',10);
L1(1) = [];
isempty(L1)
we would get TRUE because L1 is now a 1x0, but the struct still HAS the field "hi".
The answer
From my understanding, the only solution is that provided by the accepted answer. Collect the fieldnames of the struct and test if THAT is empty.
isempty(fieldnames(L1))
This is as the the "fieldnames" will create a vector cell array of the fieldnames (as char[]), thus the first dimension is the same as the number of fieldnames and a 0x1 cell array IS empty.

댓글을 달려면 로그인하십시오.

채택된 답변

KSSV
KSSV 2019년 2월 11일
isempty(fieldnames(L1))

추가 답변 (1개)

Yeqing Wang
Yeqing Wang 2020년 1월 26일
isempty(L1)

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by