2015-09-29 67 views
1

是否可以将空单元格移动到2D单元格阵列中的末尾?例如。如果单元格(2,2)是[],则单元格(3,2)将进入(2,2)的位置,(4,2)进入(3,2)等位置,而空值将被添加到例如最后一行。在2D单元阵列中移动空单元格

here

+2

单元阵列仍具有为“矩形”,这样就可以很容易地删除和整个行或列,但不能删除一个单元格。你只是想将所有的空单元格移动到它们各自行的末尾? – Dan

+0

但是你的单元格结构会发生变化,最后必须将它填零,最好将[]移动到单元结构的最后一行/列而不是删除它们 – GameOfThrows

+0

你是对的!我编辑的帖子:) – Cobe

回答

4
C = {1 []; [] 4; 'aa' []}; %// example cell array 
e = cellfun('isempty', C); %// this indicates for each cell if it's empty or not 
[~, r] = sort(e, 1); %// sorting of each col to move empty cells to the end 
[m, n] = size(C); 
C = C(bsxfun(@plus, r, (0:m:m*(n-1)))); %// apply sorting to each col, using linear indexing 

在这个例子中,C最初

C = 
    [ 1]  [] 
     [] [4] 
    'aa'  [] 

,并成为

C = 
    [ 1] [4] 
    'aa'  [] 
     []  [] 

一些言论:

  • 这是可行的,因为sort稳定:它保留原来的顺序,以防万一。请注意,e只包含零和1。
  • Linear indexingbsxfun有效地完成。 (repmatsub2ind可以替代地使用。)
+0

伟大的答案!非常高效,以及 – GameOfThrows

+0

@GameOfThrows谢谢! –

+0

:太棒了!那正是我想要的!非常感谢! :) – Cobe