2012-10-27 8 views
0

Pour cet exemple, objet:Suppression des objets Matlab de tableaux, suppression des espaces de tableau vide

classdef TestObject < handle 
    %UNTITLED Summary of this class goes here 
    % Detailed explanation goes here 

    properties 
     a; 
    end 

    methods 
    end 

end 

et cet exemple de script:

tbarray = TestObject.empty(); 

for i=1:3 
    newTestObject=TestObject; 
    newTestObject.a=i; 
    if(i==1) 
     firstTestObject=newTestObject; 
    end 
    tbarray(end+1,1)=newTestObject; 
end 
delete (firstTestObject) ; 

Après cela est exécuté tbarray première position a un TestObject vide. Est-il possible de redimensionner tbarray, de supprimer des objets vides ou d'utiliser une sorte d'appel de suppression, par exemple?

index=tbarray.remove(firstObject); 
tbarray.add(index,laterTestObject); 

ou tbarray.Replace(firstObject,laterObject);

Mise à jour: Comment puis-je trouver l'index du tableau de l'objet que je veux supprimer/remplacer. Cet exemple utilise 1, mais il peut être différent à chaque fois.

Répondre

1

tbarray(1) = [] va supprimer l'index 1 et redimensionner le tableau (donc il a maintenant 1 longueur de moins). tbarray(1) = laterObject REMPLACERONS à l'index 1.

Il n'y a pas ou Set Map avec les clés de toutes les classes (et non seulement primitives/cordes) dans Matlab, donc les choses comme tbarray.Replace(firstObject,laterObject); sont presque impossible à mettre en œuvre sans connaître l'indice.


Modifier
Si vous voulez trouver des indices d'occurrences d'un élément dans le tableau, vous pouvez utiliser find(tbarray == firstObject).
Notez que tbarray == firstObject renvoie un tableau logique qui peut être utilisé directement comme index, par ex. tbarray(tbarray == firstObject) = [] ou tbarray(tbarray == firstObject) = laterObject. Toutefois, vous devez garder à l'esprit que ces opérations sont coûteuses, car toute la baie est traversée. Si vous pouvez définir une clé unique de type double, single, un tableau de char ou des entiers 32 bits ou 64 bits signés ou non signés pour vos objets, vous pouvez les stocker dans containers.Map.

Dans cet exemple, vous utilisez une classe de handles. Si vous avez besoin d'une classe de valeur, vous devrez également définir une méthode eq() vectorisée.

+0

merci !!! Cela a fonctionné pour cet exemple de code où je connais l'index de objectToRemove. Mais dans mon cas, comment puis-je rechercher un objet dans la liste, obtenir son index, puis supprimer/remplacer à cet index. –

Questions connexes