How to check if there is any field in structure?

163 Ansichten (letzte 30 Tage)
Najmeh Eskandari
Najmeh Eskandari am 11 Feb. 2019
Kommentiert: Nicholas Ayres am 6 Apr. 2021
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 Kommentar
Nicholas Ayres
Nicholas Ayres am 6 Apr. 2021
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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

KSSV
KSSV am 11 Feb. 2019
isempty(fieldnames(L1))

Weitere Antworten (1)

Yeqing Wang
Yeqing Wang am 26 Jan. 2020
isempty(L1)

Kategorien

Mehr zu Structures finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by