2010-11-23 9 views
3

Mon problème est dans la façon de trier un tableau de cellules ne considérant que le premier élément de chaque cellule dans ce vecteur:Tri un réseau de cellules par le premier élément de chaque cellule

array_A={[3 1 5] [1 6 2] [2 4 1]} 

Je veux trier array_A , par le premier élément de chaque cellule comme ceci:

array_A={[*1* 6 2] [*2* 4 1] [*3* 1 5]} 

avez-vous une idée sur comment puis-je résoudre ce problème, d'une manière qui peut être fait de manière récursive pour des milliers de cellules?

Répondre

4

Le plus simple pourrait être de caténater array_A pour créer un tableau numérique et trier en fonction de cela. Si les vecteurs sont longs ou de longueurs différentes, vous pouvez d'abord extraire le premier élément de chaque élément du tableau de cellules et le trier.

En d'autres termes:

%# extract the first number from each element of array_A 
firstElement = cellfun(@(x)x(1),array_A); 
%# sort (the ~ discards the first output argument of sort) 
[~,sortIdx] = sort(firstElement); 
%# sort array_A using the proper sort order 
array_A_sorted = array_A(sortIdx); 
+0

+1 Zut! Juste me battre pour ça. – gnovice

+0

Excellente solution +1! L'affiche demandait * un tableau de cellules * mais cela pourrait impliquer une cellule2mat() supplémentaire dans cellfun(). – zellus