- 2nd: the value 2 is a member of both "Group 1" and "Group 2", why does the output only show "Group 1"?
- 3rd: the value 3 is only a member of "Group 2", why does the output show "Group 1"?
Conditionally select from array of struct by membership of a list in struct element
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Here's my array of structs:
X(1).Members=[1 2]
X(1).Name="Group 1"
X(2).Members=[2 3]
X(2).Name="Group 2"
Here's the conditional selection form I'm familiar with. I'm hoping there's a better way to express this:
A=[X(ismember(1,[X.Members])).Name]
A = "Group 1"
A=[X(ismember(2,[X.Members])).Name]
A = "Group 1"
A=[X(ismember(3,[X.Members])).Name]
A = "Group 1"
A=[X(ismember(4,[X.Members])).Name]
A = []
Since the 'ismember' operator returns a logical, the expression as formed returns the index of X to 0 or 1.
I would like to apply an expression to X and return each struct in X where a member is in the list of Members in the struct.
1 commentaire
Réponse acceptée
Stephen23
le 22 Jan 2021
Modifié(e) : Stephen23
le 22 Jan 2021
X(1).Members = [1,2];
X(1).Name = 'Group 1';
X(2).Members = [2,3];
X(2).Name = 'Group 2';
F = @(n)arrayfun(@(s)any(s.Members==n),X);
F(1)
F(2)
F(3)
F(4)
If you really want to use ismember, replace the anonymous function with this:
@(s)ismember(n,s.Members)
0 commentaires
Plus de réponses (1)
Voir également
Catégories
En savoir plus sur Structures dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!